成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

looter——超輕量級爬蟲框架

impig33 / 3275人閱讀

摘要:安裝僅支持及以上版本。是一個備用的選項,它使得生成的爬蟲核心用而非線程池。

如今,網(wǎng)上的爬蟲教程可謂是泛濫成災(zāi)了,從urllib開始講,最后才講到requests和selenium這類高級庫,實際上,根本就不必這么費心地去了解這么多無謂的東西的。只需記住爬蟲總共就三大步驟:發(fā)起請求——解析數(shù)據(jù)——存儲數(shù)據(jù),這樣就足以寫出最基本的爬蟲了。諸如像Scrapy這樣的框架,可以說是集成了爬蟲的一切,但是新人可能會用的不怎么順手,看教程可能還會踩各種各樣的坑,而且Scrapy本身體積也有點大。因此,本人決定親手寫一個輕量級的爬蟲框架————looter,里面集成了調(diào)試和爬蟲模板這兩個核心功能,利用looter,你就能迅速地寫出一個高效的爬蟲。另外,本項目的函數(shù)文檔也相當(dāng)完整,如果有不明白的地方可以自行閱讀源碼(一般都是按Ctrl+左鍵或者F12)。

安裝
$ pip install looter

僅支持Python3.6及以上版本。

快速開始

讓我們先來擼一個非常簡單的圖片爬蟲:首先,用shell獲取網(wǎng)站

$ looter shell konachan.com/post

然后用2行代碼就可以將圖片抓取到本地

>>> imgs = tree.cssselect("a.directlink")
>>> save_imgs(imgs)

或者只用1行也行:d

>>> save_imgs(links(res, search="jpg"))
工作流

如果你想迅速擼出一個爬蟲,那么你可以用looter提供的模板來自動生成一個

$ looter genspider   [--async]

在這行代碼中,tmpl是模板,分為data和image兩種模板。

async是一個備用的選項,它使得生成的爬蟲核心用asyncio而非線程池。

在生成的模板中,你可以自定義domain和tasklist這兩個變量。

什么是tasklist?實際上它就是你想要抓取的頁面的所有鏈接。

以konachan.com為例,你可以使用列表推導(dǎo)式來創(chuàng)建自己的tasklist:

domain = "https://konachan.com"
tasklist = [f"{domain}/post?page={i}" for i in range(1, 9777)]

然后你就要定制你的crawl函數(shù),這是爬蟲的核心部分。

def crawl(url):
    tree = lt.fetch(url)
    items = tree.cssselect("ul li")
    for item in items:
        data = dict()
        # data[...] = item.cssselect(...)
        pprint(data)

在大多數(shù)情況下,你所要抓取的內(nèi)容是一個列表(也就是HTML中的ul或ol標(biāo)簽),可以用css選擇器將它們保存為items變量。

然后,你只需使用for循環(huán)來迭代它們,并抽取你想要的數(shù)據(jù),將它們存儲到dict中。

但是,在你寫完這個爬蟲之前,最好用looter提供的shell來調(diào)試一下你的cssselect代碼是否正確。

>>> items = tree.cssselect("ul li")
>>> item = items[0]
>>> item.cssselect(anything you want to crawl)
# 注意代碼的輸出是否正確!

調(diào)試完成后,你的爬蟲自然也就完成了。怎么樣,是不是很簡單:)

當(dāng)然,本人也編寫了好幾個爬蟲例子,可供參考。

函數(shù)

looter為用戶提供了很多實用的函數(shù)。

view

在爬取頁面前,你最好確認(rèn)一下頁面的渲染是否是你想要的

>>> view(url)
save_imgs

當(dāng)你獲取了一堆圖片鏈接時,用它可以直接將它們保存到本地

>>> img_urls = [...]
>>> save_imgs(img_urls)
alexa_rank

可以獲取網(wǎng)站的reach和popularity指數(shù)(人氣度),此函數(shù)返回一個元組(url, reach_rank, popularity_rank)

>>> alexa_rank(url)
links

獲取網(wǎng)頁的所有鏈接

>>> links(res)                  # 獲取所有鏈接
>>> links(res, absolute=True)   # 獲取絕對鏈接
>>> links(res, search="text")   # 查找指定鏈接

同樣地,你也可以用正則表達式來獲取匹配的鏈接

>>> re_links(res, r"regex_pattern")
save_as_json

將所得結(jié)果保存為json文件,支持按鍵值排序

>>> total = [...]
>>> save_as_json(total, name="text", sort_by="key")
parse_robots

用于爬取網(wǎng)站robots.txt上的所有鏈接。這個在做全站爬蟲或者遞歸式url爬蟲時頗為有效

>>> parse_robots(url)
login

有一些網(wǎng)站必須要先登錄才能爬取,于是就有了login函數(shù),本質(zhì)其實就是建立session會話向服務(wù)器發(fā)送帶有data的POST請求。
但是,每個網(wǎng)站的登錄規(guī)則都各不相同,想要找到合適的postdata還是要費一番功夫的,而且更有甚者還要你構(gòu)造param或header參數(shù)。
不過幸運的是在github上已經(jīng)有人整理好了各大網(wǎng)站的模擬登錄方法——fuck-login,本人很是佩服。
總之考驗各位抓包的能力了,以下為模擬登錄網(wǎng)易126郵箱(要求參數(shù):postdata和param)

>>> params = {"df": "mail126_letter", "from": "web", "funcid": "loginone", "iframe": "1", "language": "-1", "passtype": "1", "product": "mail126",
 "verifycookie": "-1", "net": "failed", "style": "-1", "race": "-2_-2_-2_db", "uid": "[email protected]", "hid": "10010102"}
>>> postdata = {"username": 你的用戶名, "savelogin": "1", "url2": "http://mail.126.com/errorpage/error126.htm", "password": 你的密碼}
>>> url = "https://mail.126.com/entry/cgi/ntesdoor?"
>>> res, ses = login(url, postdata, params=params) # res為post請求后的頁面,ses為請求會話
>>> index_url = re.findall(r"href = "(.*?)"", res.text)[0] # 在res中獲取重定向主頁的鏈接
>>> index = ses.get(index_url) # 用ses會話訪問重定向鏈接,想確認(rèn)成功的話print下即可

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42095.html

相關(guān)文章

  • 爬蟲 - 收藏集 - 掘金

    摘要:在這之前,還是有必要對一些概念超輕量級反爬蟲方案后端掘金前言爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲修煉之道——從網(wǎng)頁中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲修煉之道 上篇 爬蟲修煉之道——編寫一個爬取多頁面的網(wǎng)絡(luò)爬蟲主要講解了如何使用python編寫一個可以下載多頁面的爬蟲,如何將相對URL轉(zhuǎn)為絕對URL,如何限速,...

    1fe1se 評論0 收藏0
  • 十分鐘解決爬蟲問題!輕量爬蟲方案

    摘要:爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。本文將描述一種盡量簡單的反爬蟲方案,可以在十幾分鐘內(nèi)解決部分簡單的爬蟲問題,緩解惡意攻擊或者是系統(tǒng)超負(fù)荷運行的狀況至于復(fù)雜的爬蟲以及更精準(zhǔn)的防御,需要另外討論。 showImg(https://segmentfault.com/img/bVDYV4?w=800&h=568); 爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。爬蟲在情報獲取、虛假流量、動態(tài)...

    LeanCloud 評論0 收藏0
  • 爬蟲與swift

    摘要:分析使用爬蟲爬取網(wǎng)站,并按事先的要求將需要的項目保存到數(shù)據(jù)庫中,然后再使用框架編寫一個服務(wù)器講數(shù)據(jù)庫中的數(shù)據(jù)讀出來,最后用編寫一個應(yīng)用將數(shù)據(jù)顯示出來。實現(xiàn)爬蟲實現(xiàn)上圖是的文檔結(jié)構(gòu),下面主要介紹幾個文件。 分析 使用爬蟲爬取網(wǎng)站page,并按事先的要求將需要的項目保存到數(shù)據(jù)庫中,然后再使用python flask框架編寫一個web 服務(wù)器講數(shù)據(jù)庫中的數(shù)據(jù)讀出來,最后用swift編寫一個...

    marser 評論0 收藏0
  • 秀的一批,那些你不得不知的 Python 殺手框架

    摘要:那在屆有哪些被封神的庫呢,今天就給大家介紹十個堪稱殺手級別的工具包??傊且豢罘浅姶笄乙子玫木W(wǎng)絡(luò)請求庫。地址最好用的框架。圖像處理,該庫是你的不二之選。 Pyt...

    zeyu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<