關(guān)于使用Scrapy的體會(huì)邓深,最明顯的感受就是這種模板化、工程化的腳手架體系笔刹,可以說是拿來即可開箱便用芥备,大多僅需按一定的規(guī)則套路配置,剩下的就是專注于編寫跟爬蟲業(yè)務(wù)有關(guān)的代碼舌菜。絕大多數(shù)的反反爬蟲策略萌壳,大多有以下幾種:
- 忽略robots.txt協(xié)議
- 添加隨機(jī)請(qǐng)求頭,如cookie日月、user-agent等
- sleep休眠
- 控制并發(fā)請(qǐng)求數(shù)袱瓮、設(shè)置頁面下載延遲
- 驗(yàn)證碼識(shí)別(靠譜)
- 使用ip代理池(最靠譜)
文章的出發(fā)點(diǎn)是share本人使用scrapy爬取Boss和拉勾兩個(gè)招聘網(wǎng)的一些實(shí)操總結(jié)經(jīng)驗(yàn)。兩個(gè)網(wǎng)站的網(wǎng)頁結(jié)構(gòu)不盡相同爱咬,好在需要及提取出的最終數(shù)據(jù)基本保持了一致尺借,出于兩個(gè)網(wǎng)站不同的反爬策略和請(qǐng)求配置(settings.py
),因此對(duì)應(yīng)實(shí)際的情況是兩個(gè)Scrapy項(xiàng)目精拟。
友情提醒燎斩,這里不介紹scrapy示例及完整代碼(Tip: 下方貼有完整代碼鏈接)虱歪。如文章標(biāo)題描述的那樣,由于拉勾和Boss都有各自不同的反爬策略栅表,多少也限制了一些爬蟲學(xué)習(xí)者的熱情笋鄙,包括我自身在內(nèi),不過多番嘗試之后還是有收獲的怪瓶,跑的是定時(shí)計(jì)劃局装,目前已入庫的有近三萬條數(shù)據(jù)。
進(jìn)入正題劳殖,下面分別介紹拉勾網(wǎng)以及Boss直聘網(wǎng)崗位招聘數(shù)據(jù)的爬取心得,不過網(wǎng)站的反爬策略和網(wǎng)頁結(jié)構(gòu)隨時(shí)都有發(fā)生變動(dòng)的可能拨脉,因此還是需要根據(jù)實(shí)際情況進(jìn)行再調(diào)整哆姻。本次分享的內(nèi)容截止到2018年09月28日,在實(shí)際運(yùn)行項(xiàng)目中依然生效玫膀。
拉勾
- 關(guān)閉默認(rèn)
cookie
(否則會(huì)跟請(qǐng)求頭中的Cookie
沖突)矛缨,自定義請(qǐng)求headers
并添加隨機(jī)Cookie
屬性- 在
settings.py
中找到并設(shè)置COOKIES_ENABLED = False
- 可以在spider代碼中為
Request
手動(dòng)添加headers
,或者修改settings.py
中的DEFAULT_REQUEST_HEADERS
屬性帖旨,或者編寫自定義的HeadersMiddleware(繼承DefaultHeadersMiddleware
箕昭,重寫process_request
方法,別忘了配置)
- 在
拉勾網(wǎng)的cookie解阅,用uuid隨機(jī)生成即可落竹,參考如下:
def random_cookie():
args = (uuid.uuid4(),) * 5
cookie = 'user_trace_token={}; LGUID={}; JSESSIONID={}; LGSID={}; LGRID={}'.format(*args)
return cookie
- 控制并發(fā)請(qǐng)求數(shù)及設(shè)置下載延遲
在settings.py
中找到并設(shè)置如下,因此理論上一天可抓60/2 * 2 * 60 * 24 =
86400條數(shù)據(jù):
# 當(dāng)并發(fā)數(shù)和下載延遲均設(shè)置為2時(shí)货抄,沒有出現(xiàn)反爬限制(可多次嘗試)
CONCURRENT_REQUESTS = 2
DOWNLOAD_DELAY = 2
補(bǔ)充:上述說明中述召,請(qǐng)求Cookie是必須要加的,否則會(huì)重定向到登錄頁面蟹地;在未使用ip代理的情況下积暖,并發(fā)數(shù)不宜設(shè)置過大,親測(cè)是直接封了IP...
Boss直聘
對(duì)比拉勾網(wǎng)怪与,感覺直聘網(wǎng)的反爬策略會(huì)更加嚴(yán)格夺刑,不過抓慢一點(diǎn)還是可以的(這樣理論上一天是60/5 * 1 * 60 * 24 =
17280條數(shù)據(jù))
設(shè)置隨機(jī)
User-Agent
(可能非必需)控制并發(fā)請(qǐng)求數(shù)、下載延遲
# 這么慢還是被限制...
CONCURRENT_REQUESTS = 1
DOWNLOAD_DELAY = 5
- 加入驗(yàn)證碼識(shí)別
事實(shí)上分别,這種情況下限制后是被重定向到一個(gè)驗(yàn)證碼頁面遍愿。本人目前的解決方案是編寫自定義的CustomRedirectMiddleware(繼承RedirectMiddleware
,重寫process_response
方法進(jìn)行驗(yàn)證碼識(shí)別[第三方API])
小結(jié)
分享的都是比較曲中的解決方案茎杂,不差錢的建議直接上ip代理(實(shí)測(cè)過免費(fèi)的错览,別指望了)。
相關(guān)代碼 - 拉勾
相關(guān)代碼 - boss
歡迎關(guān)注我的個(gè)人公眾號(hào):超級(jí)碼里奧
如果這對(duì)您有幫助煌往,歡迎點(diǎn)贊和分享倾哺,轉(zhuǎn)載請(qǐng)注明出處