1. 程式人生 > >python爬蟲(一):模擬登陸微博

python爬蟲(一):模擬登陸微博

最近花了不少時間來學python爬蟲,覺得還是有很多問題的,比如說requests.get獲得Pixiv的網頁原始碼,一直獲取不到,不過我猜測大概是headers的問題,準備之後處理。
廢話少說我們先來講一講模擬登陸微博的問題。

第一步:用Chrome來抓包

開啟微博(https://www.weibo.cn,這個是手機微博的網址,之所以用這個網址,是因為原始碼少,方便分析)

這裡寫圖片描述

點選登陸
這裡寫圖片描述
在這裡按F12檢視網頁原始碼,選擇network,把preserve log勾上,然後右擊name把method勾上。
這裡寫圖片描述
輸入賬號密碼登陸
這裡寫圖片描述
找到method為POST的那一行,然後點選
這裡寫圖片描述


這裡有一些我們需要的資訊,首先是Request URL,這個是表單提交的地址,我們的資料就是傳送到了這裡。
然後就是Request headers,這裡也有一些有用的東西,雖然說只有User-Agent是必需的,但在實際操作中發現還需要Accept,Accept-Encoding,Accept-Language,Connection,Origin,Referer。那我全都要不就行了,然而加了Content-Length,Content-Type,Host就出現了Bug,我也不知道是為什麼,有興趣的朋友可以去查一查。
然後就是form data了
這裡寫圖片描述
除了沒有值的都需要。

好了,前期工作都完成了。

第二步:程式碼部分

終於完成了前期準備,我直接上程式碼。

#注python版本為2.7,python3執行會報錯
import requests

user = '你的賬號'
password  = '你的密碼'

user_headers = {
'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36',
'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Origin': 'https://passport.weibo.cn',
'Referer': 'https://passport.weibo.cn/signin/login?entry=mweibo&r=https%3A%2F%2Fweibo.cn%2F&backTitle=%CE%A2%B2%A9&vt='
}

login_data = {
'username': user,
'password': password,
'savestate': '1',
'r': 'https://weibo.cn/',
'ec': '1',
'pagerefer': 'https://weibo.cn/pub/',
'entry': 'mweibo',
'mainpageflag': '1'
}

session = requests.Session()
session_url  = 'https://passport.weibo.cn/sso/login'#這裡是抓包時得到的地址,不是登陸頁的地址
response = session.post(session_url, headers = user_headers, data = login_data)
url='https://weibo.cn/6333949***'#注意這裡的網址不是https://weibo.cn,要加上你點開個人資料後那個地址中間那串數字,不然你打印出來的還是登陸頁的原始碼。
html=session.get(url,headers=user_headers).content
print(html)

登陸的關鍵是session,session會把cookies儲存下來,這樣在cookies失效之前,你都可以訪問微博而不需要再次POST表單。就比如倒數第二行程式碼,如果沒有session,你會獲得登陸頁的原始碼,而不是登陸後網頁的原始碼。