python登錄豆瓣并爬取文章

1.首先使用get請求獲取登錄時候需要用驗證碼
2.保存驗證碼到本地,并且手工輸入驗證碼
3.使用Chrome瀏覽器打開開發模式,切換到netword下獲取請求模擬登錄獲取請求需要的參數
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'
}

#登錄之后獲取文章的內容
def get_article_data(input_code,image_id):
    form_data = {
        'source': None,
        'redir': 'https://www.douban.com',
        'form_email': '12345@qq.com',             #輸入你對應的賬號
        '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請求登錄的頁面,獲取圖片驗證碼
    login_html = requests.get("https://accounts.douban.com/login", headers=header)
    # print login_html.content
    selector = etree.HTML(login_html.text)
    # 獲取圖片驗證碼的網絡路徑
    image_code = selector.xpath('//*[@id="captcha_image"]/@src')[0]
    # 獲取圖片對應的id
    image_id = image_code.split('=')[1].split('&')[0]
    #顯示驗證碼
    save_and_show_code(image_code)
    #獲取手工填入的驗證碼
    input_code = None
    input_code = raw_input(u'請輸入圖形驗證碼')
    #獲取登錄后的文章數據
    get_article_data(input_code,image_id)

if __name__ == '__main__':
    mian()
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容