⑴ 如何使用python解決網站的反爬蟲
1、從用戶請求的Headers反爬蟲是最常見的反爬蟲策略。
偽裝header。很多網站都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測(一些資源網站的防盜鏈就是檢測Referer)。如果遇到了這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復制到爬蟲的Headers中;或者將Referer值修改為目標網站域名[評論:往往容易被忽略,通過對請求的抓包分析,確定referer,在程序中模擬訪問請求頭中添加]。對於檢測Headers的反爬蟲,在爬蟲中修改或者添加Headers就能很好的繞過。
2、基於用戶行為反爬蟲
還有一部分網站是通過檢測用戶行為,例如同一IP短時間內多次訪問同一頁面,或者同一賬戶短時間內多次進行相同操作。[這種防爬,需要有足夠多的ip來應對]
(1)、大多數網站都是前一種情況,對於這種情況,使用IP代理就可以解決。可以專門寫一個爬蟲,爬取網上公開的代理ip,檢測後全部保存起來。有了大量代理ip後可以每請求幾次更換一個ip,這在requests或者urllib中很容易做到,這樣就能很容易的繞過第一種反爬蟲。
編寫爬蟲代理:
步驟:
1.參數是一個字典{'類型':'代理ip:埠號'}
proxy_support=urllib.request.ProxyHandler({})
2.定製、創建一個opener
opener=urllib.request.build_opener(proxy_support)
3a.安裝opener
urllib.request.install_opener(opener)
3b.調用opener
opener.open(url)
用大量代理隨機請求目標網站,應對反爬蟲
⑵ python 爬蟲,關於驗證碼的問題。輸入驗證碼才能搜索。
#給你個例子參考驗證碼請求一次就變了
#!/usr/bin/python
#coding=utf-8
importrequests
importurllib
importurllib2,hashlib,md5
importcookielib
def_md5(password):
md5=hashlib.md5()
md5.update(str.encode(password))
psw=md5.hexdigest()
returnpsw
url='https://passport.liepin.com/captcha/randomcode?2hy270c2ji1'
req=urllib2.Request(url)
res_data=urllib2.urlopen(req)
res=res_data.read()
output_file=open('1.jpg','wb')
output_file.writelines(res)
output_file.close()
verifycode=res_data.headers['Set-Cookie'].split(';')[0]
verifycode=verifycode.replace('verifycode=','')
filename=res_data.headers['Content-disposition'].split(';')[1].strip()
exec(filename)
cookiejar=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cookiejar))
vidcode=raw_input(u"請輸入驗證碼(在本路徑1.jpg):")
data={'user_login':"[email protected]",
'isMd5':"1",
'user_pwd':_md5('love123456'),
'verifycode':vidcode,
'url':""}
url='https://passport.liepin.com/h/login.json'
data=urllib.urlencode(data)
headers={'Content-Type':'application/x-www-form-urlencoded','X-Requested-With':'XMLHttpRequest','Cookie':'verifycode={0};'.format(verifycode)}
request=urllib2.Request(url,data,headers)
response=opener.open(request)
print'-------result-------------'
printresponse.read()
print'-------headers-------------'
printresponse.headers
print'-------cookies-------------'
forcookieincookiejar:
printcookie
⑶ 用Python爬取大眾點評時被反爬ip被封怎麼辦,他總叫我滑動驗證但滑動了也沒有用。。。求大佬幫忙。。。
1、放慢爬取速度,減小對於目標網站造成的壓力。但是這樣會減少單位時間類的爬取量。
第二種方法是通過設置IP等手段,突破反爬蟲機制繼續高頻率爬取。網站的反爬機制會檢查來訪的IP地址,為了防止IP被封,這時就可以使用HTTP,來切換不同的IP爬取內容。使用代理IP簡單的來講就是讓代理伺服器去幫我們得到網頁內容,然後再轉發回我們的電腦。要選擇高匿的ip,IPIDEA提供高匿穩定的IP同時更注重用戶隱私的保護,保障用戶的信息安全。
2、這樣目標網站既不知道我們使用代理,更不會知道我們真實的IP地址。
3、建立IP池,池子盡可能的大,且不同IP均勻輪換。
如果你需要大量爬取數據,建議你使用HTTP代理IP,在IP被封掉之前或者封掉之後迅速換掉該IP,這里有個使用的技巧是循環使用,在一個IP沒有被封之前,就換掉,過一會再換回來。這樣就可以使用相對較少的IP進行大量訪問。
⑷ python爬蟲需要什麼基礎
1. 學習Python基礎知識並實現基本的爬蟲過程
一般獲取數據的過程都是按照 發送請求-獲得頁面反饋-解析並且存儲數據 這三個流程來實現的。這個過程其實就是模擬了一個人工瀏覽網頁的過程。
Python中爬蟲相關的包很多:urllib、requests、bs4、scrapy、pyspider 等,我們可以按照requests
負責連接網站,返回網頁,Xpath 用於解析網頁,便於抽取數據。
2.了解非結構化數據的存儲
爬蟲抓取的數據結構復雜 傳統的結構化資料庫可能並不是特別適合我們使用。我們前期推薦使用MongoDB 就可以。
3. 掌握一些常用的反爬蟲技巧
使用代理IP池、抓包、驗證碼的OCR處理等處理方式即可以解決大部分網站的反爬蟲策略。
4.了解分布式存儲
分布式這個東西,聽起來很恐怖,但其實就是利用多線程的原理讓多個爬蟲同時工作,需要你掌握 Scrapy + MongoDB + Redis
這三種工具就可以了。
⑸ python 爬取帶驗證碼需要登陸後的網站
這個有點繁瑣,告訴你,你也可能搞不定
首先請求網頁,然後用你的未登錄cookies去二次請求驗證碼,用byte類型保存在內存中,用pillow模塊展示出來,你在手動輸入,主程序這邊用input阻塞,等你輸入完,主程序向登錄介面提交賬號密碼和驗證碼,然後後面就正常爬取,這是非selenium的模擬登錄,這邊糾正一點,凡是登錄,不管你用什麼模塊,都屬於模擬登錄,並非selenium登錄方式才叫模擬登錄,
⑹ python爬取驗證碼圖片,遇到驗證碼src屬性為完整的網址應該怎麼做
爬蟲中手動輸入驗證碼方法無法獲取圖片src地址
驗證碼在html中圖片標簽內容:
<class=「verCodeImg」 src="/kaptcha.jpg?v=0.234724039578059" οnclick=「verCode(this)」>
< class=「verCodeImg」 src="/kaptcha.jpg?v=0.234724239578059" οnclick=「verCode(this)」>
可知獲取到驗證碼的src地址就能動態的獲得驗證碼
因為驗證碼是動態的!動態的!動態的!
用動態爬取網頁的方法:
要用到selenium庫
其實獲得了驗證碼的src地址,我還是沒能成功登陸
因為即使是相同的鏈接點進去,每一次刷新都會有不同的驗證碼
通過動態網頁打開是一張
解析src地址出來是另一張