Python爬蟲(3)豆瓣登錄


前面(1)(2)的內容已經足夠爬蟲如鏈家網之類的不需要登錄可以直接獲取數據的網站。

而要爬取社交網站比較鮮明的特點就是需要登錄,否則很多東西都無法獲取。經過測試發現,微博,知乎都不是很好登錄,知乎有時候的驗證碼會類似12306那樣,而微博除了驗證碼,在傳遞參數的時候會對用戶名進行base64加密。這里講簡單的豆瓣的登錄以及簡單的爬取。

對於Chrome內核的瀏覽器來說,可以右鍵,審查元素,選擇network,登錄一下自己的賬號。

選中login會有各種post還是get,url,連接頭各種信息。

往下拉找到formdat,像微博就把formdata給加密了。

form data里有我們登錄所需要的所有信息,其中captcha-solution就是登錄驗證碼,有時候有 有時候沒有所以在請求的時候,需要判斷有沒有。

import requests
import re
from bs4 import BeautifulSoup as bs
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

s = requests.Session()
url_login = 'http://accounts.douban.com/login'
url_contacts = 'https://www.douban.com/contacts/list'

formdata = {
    'source':'index_nav',
    'redir': 'https://www.douban.com',
    'form_email': '22222',
    'form_password': '111111',
    'login': u'登錄'
}
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}

r = s.post(url_login, data=formdata, headers=headers)
content = r.text

soup = bs(content, 'lxml')
captcha = soup.find('img', id='captcha_image')

if captcha:
    captcha_url = captcha['src']
    re_captcha_id = r'<input type-"hidden" name="captcha-id" value="(.*?)"/'
    captcha_id = re.findall(re_captcha_id, content)
    print captcha_id
    print captcha_url
    captcha_text = raw_input('Please input 驗證碼啊')
    formdata['captcha-solution'] = captcha_text
    formdata['captcha-id'] = captcha_id
    r = s.post(url_login, data=formdata, headers=headers)

  這樣就成功登錄啦。

其實還有一種簡單的辦法,就是在登錄的時候 選擇記住我,然后在Request Headers里復制下來cookie,cookie可以用很久,所以還是足夠自用的。

import requests
import os

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
cookies = {'cookie':1'}
url = 'http://www.douban.com'
r = requests.get(url, cookies=cookies,headers=headers)
r.encoding = 'utf-8'
print r.text
with open('douban.txt','wb+',encoding = 'utf') as f:
    f.write(r.content)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM