摘要:安裝僅支持及以上版本。是一個(gè)備用的選項(xiàng),它使得生成的爬蟲核心用而非線程池。
如今,網(wǎng)上的爬蟲教程可謂是泛濫成災(zāi)了,從urllib開始講,最后才講到requests和selenium這類高級(jí)庫(kù),實(shí)際上,根本就不必這么費(fèi)心地去了解這么多無(wú)謂的東西的。只需記住爬蟲總共就三大步驟:發(fā)起請(qǐng)求——解析數(shù)據(jù)——存儲(chǔ)數(shù)據(jù),這樣就足以寫出最基本的爬蟲了。諸如像Scrapy這樣的框架,可以說(shuō)是集成了爬蟲的一切,但是新人可能會(huì)用的不怎么順手,看教程可能還會(huì)踩各種各樣的坑,而且Scrapy本身體積也有點(diǎn)大。因此,本人決定親手寫一個(gè)輕量級(jí)的爬蟲框架————looter,里面集成了調(diào)試和爬蟲模板這兩個(gè)核心功能,利用looter,你就能迅速地寫出一個(gè)高效的爬蟲。另外,本項(xiàng)目的函數(shù)文檔也相當(dāng)完整,如果有不明白的地方可以自行閱讀源碼(一般都是按Ctrl+左鍵或者F12)。
安裝$ pip install looter
僅支持Python3.6及以上版本。
快速開始讓我們先來(lái)擼一個(gè)非常簡(jiǎn)單的圖片爬蟲:首先,用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"))工作流
如果你想迅速擼出一個(gè)爬蟲,那么你可以用looter提供的模板來(lái)自動(dòng)生成一個(gè)
$ looter genspider[--async]
在這行代碼中,tmpl是模板,分為data和image兩種模板。
async是一個(gè)備用的選項(xiàng),它使得生成的爬蟲核心用asyncio而非線程池。
在生成的模板中,你可以自定義domain和tasklist這兩個(gè)變量。
什么是tasklist?實(shí)際上它就是你想要抓取的頁(yè)面的所有鏈接。
以konachan.com為例,你可以使用列表推導(dǎo)式來(lái)創(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)容是一個(gè)列表(也就是HTML中的ul或ol標(biāo)簽),可以用css選擇器將它們保存為items變量。
然后,你只需使用for循環(huán)來(lái)迭代它們,并抽取你想要的數(shù)據(jù),將它們存儲(chǔ)到dict中。
但是,在你寫完這個(gè)爬蟲之前,最好用looter提供的shell來(lái)調(diào)試一下你的cssselect代碼是否正確。
>>> items = tree.cssselect("ul li") >>> item = items[0] >>> item.cssselect(anything you want to crawl) # 注意代碼的輸出是否正確!
調(diào)試完成后,你的爬蟲自然也就完成了。怎么樣,是不是很簡(jiǎn)單:)
當(dāng)然,本人也編寫了好幾個(gè)爬蟲例子,可供參考。
函數(shù)looter為用戶提供了很多實(shí)用的函數(shù)。
view在爬取頁(yè)面前,你最好確認(rèn)一下頁(yè)面的渲染是否是你想要的
>>> view(url)save_imgs
當(dāng)你獲取了一堆圖片鏈接時(shí),用它可以直接將它們保存到本地
>>> img_urls = [...] >>> save_imgs(img_urls)alexa_rank
可以獲取網(wǎng)站的reach和popularity指數(shù)(人氣度),此函數(shù)返回一個(gè)元組(url, reach_rank, popularity_rank)
>>> alexa_rank(url)links
獲取網(wǎng)頁(yè)的所有鏈接
>>> links(res) # 獲取所有鏈接 >>> links(res, absolute=True) # 獲取絕對(duì)鏈接 >>> links(res, search="text") # 查找指定鏈接
同樣地,你也可以用正則表達(dá)式來(lái)獲取匹配的鏈接
>>> 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上的所有鏈接。這個(gè)在做全站爬蟲或者遞歸式url爬蟲時(shí)頗為有效
>>> parse_robots(url)login
有一些網(wǎng)站必須要先登錄才能爬取,于是就有了login函數(shù),本質(zhì)其實(shí)就是建立session會(huì)話向服務(wù)器發(fā)送帶有data的POST請(qǐng)求。
但是,每個(gè)網(wǎng)站的登錄規(guī)則都各不相同,想要找到合適的postdata還是要費(fèi)一番功夫的,而且更有甚者還要你構(gòu)造param或header參數(shù)。
不過幸運(yùn)的是在github上已經(jīng)有人整理好了各大網(wǎng)站的模擬登錄方法——fuck-login,本人很是佩服。
總之考驗(yàn)各位抓包的能力了,以下為模擬登錄網(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": "webscraping123@126.com", "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請(qǐng)求后的頁(yè)面,ses為請(qǐng)求會(huì)話 >>> index_url = re.findall(r"href = "(.*?)"", res.text)[0] # 在res中獲取重定向主頁(yè)的鏈接 >>> index = ses.get(index_url) # 用ses會(huì)話訪問重定向鏈接,想確認(rèn)成功的話print下即可
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42095.html
摘要:在這之前,還是有必要對(duì)一些概念超輕量級(jí)反爬蟲方案后端掘金前言爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。 爬蟲修煉之道——從網(wǎng)頁(yè)中提取結(jié)構(gòu)化數(shù)據(jù)并保存(以爬取糗百文本板塊所有糗事為例) - 后端 - 掘金歡迎大家關(guān)注我的專題:爬蟲修煉之道 上篇 爬蟲修煉之道——編寫一個(gè)爬取多頁(yè)面的網(wǎng)絡(luò)爬蟲主要講解了如何使用python編寫一個(gè)可以下載多頁(yè)面的爬蟲,如何將相對(duì)URL轉(zhuǎn)為絕對(duì)URL,如何限速,...
摘要:爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。本文將描述一種盡量簡(jiǎn)單的反爬蟲方案,可以在十幾分鐘內(nèi)解決部分簡(jiǎn)單的爬蟲問題,緩解惡意攻擊或者是系統(tǒng)超負(fù)荷運(yùn)行的狀況至于復(fù)雜的爬蟲以及更精準(zhǔn)的防御,需要另外討論。 showImg(https://segmentfault.com/img/bVDYV4?w=800&h=568); 爬蟲和反爬蟲日益成為每家公司的標(biāo)配系統(tǒng)。爬蟲在情報(bào)獲取、虛假流量、動(dòng)態(tài)...
摘要:分析使用爬蟲爬取網(wǎng)站,并按事先的要求將需要的項(xiàng)目保存到數(shù)據(jù)庫(kù)中,然后再使用框架編寫一個(gè)服務(wù)器講數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀出來(lái),最后用編寫一個(gè)應(yīng)用將數(shù)據(jù)顯示出來(lái)。實(shí)現(xiàn)爬蟲實(shí)現(xiàn)上圖是的文檔結(jié)構(gòu),下面主要介紹幾個(gè)文件。 分析 使用爬蟲爬取網(wǎng)站page,并按事先的要求將需要的項(xiàng)目保存到數(shù)據(jù)庫(kù)中,然后再使用python flask框架編寫一個(gè)web 服務(wù)器講數(shù)據(jù)庫(kù)中的數(shù)據(jù)讀出來(lái),最后用swift編寫一個(gè)...
摘要:那在屆有哪些被封神的庫(kù)呢,今天就給大家介紹十個(gè)堪稱殺手級(jí)別的工具包。總之,是一款非常強(qiáng)大且易用的網(wǎng)絡(luò)請(qǐng)求庫(kù)。地址最好用的框架。圖像處理,該庫(kù)是你的不二之選。 Pyt...
閱讀 925·2021-11-08 13:22
閱讀 2849·2021-09-29 09:45
閱讀 2827·2021-09-09 11:52
閱讀 2262·2019-08-30 13:20
閱讀 3747·2019-08-29 13:28
閱讀 1362·2019-08-29 12:32
閱讀 2726·2019-08-29 11:10
閱讀 1648·2019-08-26 13:34