1.首先使用get請求獲取登錄時(shí)候需要用驗(yàn)證碼
2.保存驗(yàn)證碼到本地均唉,并且手工輸入驗(yàn)證碼
3.使用Chrome瀏覽器打開開發(fā)模式瘤运,切換到netword下獲取請求模擬登錄獲取請求需要的參數(shù)
4.登錄成功開始爬取文章
注:改demo只是用來練手并記錄一下辱挥,所以健壯性沒有處理好
import requests
from lxml import etree
from PIL import Image
header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36'
}
#登錄之后獲取文章的內(nèi)容
def get_article_data(input_code,image_id):
form_data = {
'source': None,
'redir': 'https://www.douban.com',
'form_email': '12345@qq.com', #輸入你對應(yīng)的賬號
'form_password': '111111', #替換密碼
'captcha-solution': input_code,
'captcha-id': image_id,
'login': '%E7%99%BB%E5%BD%95'
}
s = requests.session()
#模擬登錄操作
login_data = s.post('https://accounts.douban.com/login', headers=header, data=form_data)
login_selecotor = etree.HTML(login_data.content)
article_list = login_selecotor.xpath('//div[@data-uid = "900117594"]')
for article in range(len((article_list))):
print login_selecotor.xpath("http://div[@class='title']/a/text()")[article].encode('utf-8')
#保存并顯示圖片
def save_and_show_code(url):
# 獲取圖片
image_content = requests.get(url, headers=header)
# 保存圖片到本地
with open('code.jpg', 'wb') as fp:
fp.write(image_content.content)
# 使用PIL打開圖片
img = Image.open('code.jpg')
img.show()
def mian():
# 用get請求登錄的頁面置吓,獲取圖片驗(yàn)證碼
login_html = requests.get("https://accounts.douban.com/login", headers=header)
# print login_html.content
selector = etree.HTML(login_html.text)
# 獲取圖片驗(yàn)證碼的網(wǎng)絡(luò)路徑
image_code = selector.xpath('//*[@id="captcha_image"]/@src')[0]
# 獲取圖片對應(yīng)的id
image_id = image_code.split('=')[1].split('&')[0]
#顯示驗(yàn)證碼
save_and_show_code(image_code)
#獲取手工填入的驗(yàn)證碼
input_code = None
input_code = raw_input(u'請輸入圖形驗(yàn)證碼')
#獲取登錄后的文章數(shù)據(jù)
get_article_data(input_code,image_id)
if __name__ == '__main__':
mian()