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

首頁 > 編程 > Python > 正文

使用python 爬蟲抓站的一些技巧總結(jié)

2020-02-16 11:33:33
字體:
供稿:網(wǎng)友

學(xué)用python也有3個(gè)多月了,用得最多的還是各類爬蟲腳本:寫過抓代理本機(jī)驗(yàn)證的腳本,寫過在discuz論壇中自動(dòng)登錄自動(dòng)發(fā)貼的腳本,寫過自動(dòng)收郵件的腳本,寫過簡單的驗(yàn)證碼識別的腳本,本來想寫google music的抓取腳本的,結(jié)果有了強(qiáng)大的gmbox,也就不用寫了。

這些腳本有一個(gè)共性,都是和web相關(guān)的,總要用到獲取鏈接的一些方法,再加上simplecd這個(gè)半爬蟲半網(wǎng)站的項(xiàng)目,累積不少爬蟲抓站的經(jīng)驗(yàn),在此總結(jié)一下,那么以后做東西也就不用重復(fù)勞動(dòng)了。

1.最基本的抓站

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

2.使用代理服務(wù)器

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

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()

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

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

3.2 表單的處理

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

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

這個(gè)我就舉個(gè)例子好了,以verycd為例,先找到自己發(fā)的POST請求,以及POST表單項(xiàng):

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

好的,有了要填寫的數(shù)據(jù),我們就要生成postdata

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

然后生成http請求,再發(fā)送請求:

req = urllib2.Request( url = 'http://secure.verycd.com/signin/*/http://www.verycd.com/', data = postdata)result = urllib2.urlopen(req).read()            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 怀化市| 湖南省| 英吉沙县| 淄博市| 灵山县| 双鸭山市| 若尔盖县| 东乡县| 达拉特旗| 米泉市| 法库县| 贵港市| 溧阳市| 资源县| 彭州市| 平罗县| 江城| 盐津县| 邵阳市| 泸西县| 太仆寺旗| 柳林县| 黄龙县| 同心县| 关岭| 深圳市| 南投县| 疏附县| 伊吾县| 高雄市| 镇坪县| 荣昌县| 安陆市| 杨浦区| 柘荣县| 张掖市| 河西区| 临泉县| 南丰县| 无锡市| 河西区|