新聞中心
這篇文章主要講解了“使用Scrapy框架時(shí)怎么應(yīng)對(duì)普通的反爬機(jī)制”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“使用Scrapy框架時(shí)怎么應(yīng)對(duì)普通的反爬機(jī)制”吧!

目前成都創(chuàng)新互聯(lián)公司已為1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、潼南網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
header檢驗(yàn)
最簡(jiǎn)單的反爬機(jī)制,就是檢查HTTP請(qǐng)求的Headers信息,包括User-Agent, Referer、Cookies等。
User-Agent
User-Agent是檢查用戶所用客戶端的種類和版本,在Scrapy中,通常是在下載器中間件中進(jìn)行處理。比如在setting.py中建立一個(gè)包含很多瀏覽器User-Agent的列表,然后新建一個(gè)random_user_agent文件:
class RandomUserAgentMiddleware(object): @classmethod defprocess_request(cls, request, spider): ua = random.choice(spider.settings['USER_AGENT_LIST']) if ua: request.headers.setdefault('User-Agent', ua)這樣就可以在每次請(qǐng)求中,隨機(jī)選取一個(gè)真實(shí)瀏覽器的User-Agent。
Referer
Referer是檢查此請(qǐng)求由哪里來,通??梢宰鰣D片的盜鏈判斷。在Scrapy中,如果某個(gè)頁面url是通過之前爬取的頁面提取到,Scrapy會(huì)自動(dòng)把之前爬取的頁面url作為Referfer。也可以通過上面的方式自己定義Referfer字段。
Cookies
網(wǎng)站可能會(huì)檢測(cè)Cookie中session_id的使用次數(shù),如果超過限制,就觸發(fā)反爬策略。所以可以在Scrapy中設(shè)置 COOKIES_ENABLED = False 讓請(qǐng)求不帶Cookies。
也有網(wǎng)站強(qiáng)制開啟Cookis,這時(shí)就要麻煩一點(diǎn)了??梢粤韺懸粋€(gè)簡(jiǎn)單的爬蟲,定時(shí)向目標(biāo)網(wǎng)站發(fā)送不帶Cookies的請(qǐng)求,提取響應(yīng)中Set-cookie字段信息并保存。爬取網(wǎng)頁時(shí),把存儲(chǔ)起來的Cookies帶入Headers中。
X-Forwarded-For
在請(qǐng)求頭中添加X-Forwarded-For字段,將自己申明為一個(gè)透明的代理 動(dòng)態(tài)加載 現(xiàn)在越來越多的網(wǎng)站使用ajax動(dòng)態(tài)加載內(nèi)容,這時(shí)候可以先截取ajax請(qǐng)求分析一下,有可能根據(jù)ajax請(qǐng)求構(gòu)造出相應(yīng)的API請(qǐng)求的URL就可以直接獲取想要的內(nèi)容,通常是json格式,反而還不用去解析HTML。 然而,很多時(shí)候ajax請(qǐng)求都會(huì)經(jīng)過后端鑒權(quán),不能直接構(gòu)造URL獲取。這時(shí)就可以通過PhantomJS+Selenium模擬瀏覽器行為,抓取經(jīng)過js渲染后的頁面。 需要注意的是,使用Selenium后,請(qǐng)求不再由Scrapy的Downloader執(zhí)行,所以之前添加的請(qǐng)求頭等信息都會(huì)失效,需要在Selenium中重新添加 另外,調(diào)用PhantomJs需要指定PhantomJs的可執(zhí)行文件路徑,通常是將該路徑添加到系統(tǒng)的path路徑,讓程序執(zhí)行時(shí)自動(dòng)去path中尋找。我們的爬蟲經(jīng)常會(huì)放到crontab中定時(shí)執(zhí)行,而crontab中的環(huán)境變量和系統(tǒng)的環(huán)境變量不同,所以就加載不到PhamtonJs需要的路徑,所以***是在申明時(shí)指定路徑: 感謝各位的閱讀,以上就是“使用Scrapy框架時(shí)怎么應(yīng)對(duì)普通的反爬機(jī)制”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)使用Scrapy框架時(shí)怎么應(yīng)對(duì)普通的反爬機(jī)制這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!headers = {...} for key, valuein headers.iteritems(): webdriver.DesiredCapabilities.PHANTOMJS['phantomjs.page.customHeaders.{}'.format(key)] = valuedriver = webdriver.PhantomJS(executable_path='/usr/local/bin/phantomjs')
分享名稱:使用Scrapy框架時(shí)怎么應(yīng)對(duì)普通的反爬機(jī)制
URL地址:http://m.biofuelwatch.net/article/ppjpjg.html


咨詢
建站咨詢
