国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Python > 正文

使用python 爬蟲抓站的一些技巧總結

2024-09-09 19:02:20
字體:
來源:轉載
供稿:網友

學用python也有3個多月了,用得最多的還是各類爬蟲腳本:寫過抓代理本機驗證的腳本,寫過在discuz論壇中自動登錄自動發貼的腳本,寫過自動收郵件的腳本,寫過簡單的驗證碼識別的腳本,本來想寫google music的抓取腳本的,結果有了強大的gmbox,也就不用寫了。

這些腳本有一個共性,都是和web相關的,總要用到獲取鏈接的一些方法,再加上simplecd這個半爬蟲半網站的項目,累積不少爬蟲抓站的經驗,在此總結一下,那么以后做東西也就不用重復勞動了。

1.最基本的抓站

import urllib2content = urllib2.urlopen('http://XXXX').read()

2.使用代理服務器

這在某些情況下比較有用,比如IP被封了,或者比如IP訪問的次數受到限制等等。

import urllib2proxy_support = urllib2.ProxyHandler({'http':'http://XX.XX.XX.XX:XXXX'})opener = urllib2.build_opener(proxy_support, urllib2.HTTPHandler)urllib2.install_opener(opener)content = urllib2.urlopen('http://XXXX').read()

3.需要登錄的情況

登錄的情況比較麻煩我把問題拆分一下:

3.1 cookie的處理

import urllib2, cookielibcookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar())opener = urllib2.build_opener(cookie_support, urllib2.HTTPHandler)urllib2.install_opener(opener)content = urllib2.urlopen('http://XXXX').read()

是的沒錯,如果想同時用代理和cookie,那就加入proxy_support然后operner改為

opener = urllib2.build_opener(proxy_support, cookie_support, urllib2.HTTPHandler)

3.2 表單的處理

登錄必要填表,表單怎么填?首先利用工具截取所要填表的內容。

比如我一般用firefox+httpfox插件來看看自己到底發送了些什么包

這個我就舉個例子好了,以verycd為例,先找到自己發的POST請求,以及POST表單項:

可以看到verycd的話需要填username,password,continueURI,fk,login_submit這幾項,其中fk是隨機生成的(其實不太隨機,看上去像是把epoch時間經過簡單的編碼生成的),需要從網頁獲取,也就是說得先訪問一次網頁,用正則表達式等工具截取返回數據中的fk項。continueURI顧名思義可以隨便寫,login_submit是固定的,這從源碼可以看出。還有username,password那就很顯然了。

好的,有了要填寫的數據,我們就要生成postdata

import urllibpostdata=urllib.urlencode({ 'username':'XXXXX', 'password':'XXXXX', 'continueURI':'http://www.verycd.com/', 'fk':fk, 'login_submit':'登錄'})

然后生成http請求,再發送請求:

req = urllib2.Request( url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/', data = postdata)result = urllib2.urlopen(req).read()

3.3 偽裝成瀏覽器訪問

某些網站反感爬蟲的到訪,于是對爬蟲一律拒絕請求。這時候我們需要偽裝成瀏覽器,這可以通過修改http包中的header來實現:

headers = { 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}req = urllib2.Request( url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/', data = postdata, headers = headers)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 时尚| 绥滨县| 南江县| 合山市| 湄潭县| 嘉黎县| 大安市| 黑龙江省| 高密市| 朝阳区| 大埔区| 德阳市| 静海县| 阿城市| 潞西市| 家居| 烟台市| 奉节县| 永寿县| 梁山县| 南川市| 苏州市| 故城县| 永川市| 临泉县| 临夏县| 柘荣县| 岚皋县| 泰来县| 内黄县| 德昌县| 肇庆市| 射洪县| 鄄城县| 青田县| 东光县| 扶沟县| 马公市| 化州市| 宁安市| 安化县|