好幾天過去了,終于可以更新第二篇爬蟲,這次想用python爬蟲模擬登陸豆瓣并爬取主頁上精選內(nèi)容的標(biāo)題部分,確認(rèn)登錄成功。
前期分析
首先我們要模擬登陸豆瓣就必須先知道真實的用戶登錄豆瓣是個什么流程。因此我們可以打開chrome瀏覽器開發(fā)者工具抓包分析,豆瓣的網(wǎng)站登錄流程以及需要post的對應(yīng)的信息。這邊以豆瓣為實例:

post數(shù)據(jù)
這就是我們需要提交的信息,包括用戶名和密碼,以及驗證碼和驗證碼的ID,想要模擬豆瓣登錄就要構(gòu)造一個相同的post請求。
工具使用
這一次我們會使用resquests這個庫了,因為requests直接省去了urllib和urllib2的很多麻煩,省去了很多冗余的代碼,如果不熟悉可以去官網(wǎng)去查看。Requests
另外還需要對bs4有一定的了解,會省去不少麻煩,以及RE正則表達(dá)式,這里快捷下幫助文檔。 BeautifulSoup
基本框架
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import urllib
import re
url = 'https://accounts.douban.com/login'
#構(gòu)造post數(shù)據(jù)
data={
'redir': 'https://www.douban.com/people/138461169/',
'form_email':'xxxxxx',
'form_password':'xxxxxx',
'login':u'登錄'
}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
r = requests.post(url, data, headers=headers)
page = r.text
#利用bs4獲得驗證碼圖片地址
soup = BeautifulSoup(page,"html.parser")
captcha_url = soup.find('img',id='captcha_image')['src']
#利用正則獲得驗證碼ID
pattern = re.compile('<input type="hidden" name="captcha-id" value="(.*?)"/')
captcha_id = re.findall(pattern, page)
#將驗證碼圖片保存到本地
urllib.urlretrieve(captcha_url,"captcha.jpg")
captcha = raw_input('please input the captcha:')
data['captcha-solution'] = captcha
data['captcha-id'] = captcha_id
r = requests.post(url, data=data, headers=headers)
page = r.text
?測試打開本地驗證碼圖片,輸入。

登錄成功
登錄成功抓取標(biāo)題
?成功登錄后需要爬取熱門精選的標(biāo)題
# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import urllib
import re
url = 'https://accounts.douban.com/login'
data={
'redir': 'https://www.douban.com/',
'form_email':'xxxxxx',
'form_password':'xxxxxx',
'login':u'登錄'
}
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
r = requests.post(url, data, headers=headers)
page = r.text
soup = BeautifulSoup(page,"html.parser")
captcha_url = soup.find('img',id='captcha_image')['src']
pattern = re.compile('<input type="hidden" name="captcha-id" value="(.*?)"/')
captcha_id = re.findall(pattern, page)
urllib.urlretrieve(captcha_url,"captcha.jpg")
captcha = raw_input('please input the captcha:')
data['captcha-solution'] = captcha
data['captcha-id'] = captcha_id
r = requests.post(url, data=data, headers=headers)
page = r.text
soup = BeautifulSoup(page,"html.parser")
result = soup.findAll('div',attrs={'class':'title'})
# print result
for item in result:
print item.find('a').get_text()
原網(wǎng)頁內(nèi)容:

網(wǎng)頁內(nèi)容
下圖就是抓取到的內(nèi)容:

標(biāo)題內(nèi)容
?到這里已經(jīng)完成了初步的腳本,因為實驗暫時做到這。
面向?qū)ο蟾膶懘a
數(shù)據(jù)庫存儲
?這倆塊還需要完善更新...