爬蟲虛擬登入

2021-10-10 11:29:13 字數 3113 閱讀 2703

模擬登入這塊我本來試著scrapy,但是我覺得真的很不靈活,倒騰了半天,也不行。後來還是用了我之前寫的**,用requests模組模擬。requests模組特別好用,比urllib2以及其他的都好用(至少我是這麼覺得地)。

模擬登入其實主要掌握了幾點,就很好下手。

要抓住真正要登入的url;

要拿到要post的表單資料form data,一般是以字典形式;

填寫好header,有的**可能會認證user-agent,host,referer等等請求頭。

下面就來逐步說說我寫模擬登入的過程。 想要拿到上面說到的資料,應該抓包分析,可以直接使用火狐的firebug外掛程式或者chrome瀏覽器直接分析。

目標**:

然後再看下提交的表單資料:

請求頭:

至此,我們已經拿到了所有需要的資料,現在開始模擬。

我們使用requests模組,該模組有session類,很管用。session類物件讓你能夠跨請求保持某些引數,它也會在同乙個 session 例項發出的所有請求之間保持cookies.也就是說用乙個session預設儲存了cookie,不用認為去處理cookie,很方便 。

def login(self,posturl,postdata):

self.build_opener()

postdata = urllib.urlencode(postdata)

request = urllib2.request(url=posturl,data=postdata,headers=self.headers)

#print self.opener.open(request)

resp = urllib2.urlopen(request).read()

print resp

self.session = requests.session()

r = self.session.post(posturl,data=postdata,headers=self.headers)

return dict(r.cookies) if not isinstance(r.cookies,dict) else r.cookies

注意我的**,session方法很簡單,而用urllib2方法也可以實現目的,但是很麻煩。我這裡的headers是我在類中定義的屬性,就不過細贅述。我這裡返回cookie,是為了給我的scrapy使用的,可忽略。

執行完上述操作後,我們就可以對需要登入才能訪問的介面進行爬取了。

def login_get_content(self,url,url_type='html'):

content = self.session.get(url,timeout = 15)

try:

#get original data brfore transferring unicode

content = content.content

except unicodeencodeerror:

content = content.text.encode('utf-8')

except unicodedecodeerror:

print 'test'

content = content.text

content = stringio(content)

#print content.read(),'test cstr'

if url_type == 'json':

return json.load(content)

elif url_type == 'xml':

return et.parse(content)

else:

return beautifulsoup(content,"html5lib")

我上面使用beautifulsoup進行頁面分析了。

看了上述操作,你肯定也會有感觸,requests很好用。

說了上面的模擬登入,有人會說太麻煩,每次都要自己尋找posturl,formdata等等一大堆,他們提出直接手動登入,然後獲取響應頭中的cookie,這樣很方便。但這最大的問題就是cookie是存在有效期,過期後就不好用了,而且作為程式設計師,怎麼能允許自己總是手動這麼low的方式存在呢,所以還是一勞永逸的好。獲得cookie之後,你別的地方也完全可以使用該cookie進行登入。我在scrapy中就將requests與其結合了。

class zxspider(crawlspider):

name = 'zhixing'

def start_requests(self):

spider = base_spider('zhixing',['host','origin','referer'])

posturl = ''

postdata = {

'username':'***',

'password':'*****',

'quickforward':'yes',

'handlekey':'ls'

cookies = spider.login(posturl,postdata)

url = ''

return [request(url,cookies=cookies,callback=self.parse_page,headers=spider.headers)]

def parse_page(self,response):

sel = selector(response)

r = sel.xpath('//td[@id="postmessage_10415551"]/text()').extract_first()

print r

return r

在scrapy中獲取到cookies之後,就可以隨心所欲的進行爬取啦!

爬蟲 模擬登入

在一些爬蟲中,需要用到賬號登入進入,才能看到需要爬取的內容,因此實現程式自動模擬登入非常有必要。目前大部分 的登入,都是使用表單提交的方法實現的,這一類 的模擬登入,相信度娘已經給出來的許多例項。還有一類 不是使用網頁自帶表單提交的方法,自己實現了js方法來登入,這就需要進行特別的模擬瀏覽器行為。本...

golang爬蟲登入

www.changtu.com 實現登入頁面的抓取,http請求登入,下面直接貼 實現get請求函式 func this myspider readurlbody string,error defer resp.body.close body,err ioutil.readall resp.body...

爬蟲 登入網頁

usr bin env python coding utf 8 file loginmmvoip.py author lucasysfeng revision 2014 06 13 14 26 11 description 登入 獲取cookie 訪問任意url import cookielib i...