僅為練手之作,代碼十分粗糙吏廉,只是進(jìn)行一個思路的總結(jié)泞遗,勿噴,接受指點
- 爬取微博電腦版的難度很大(不要問耙蔑,問就不會)盐股,我們退而求其次選擇手機(jī)版微博
手機(jī)版微博網(wǎng)址 - 在這里我們選擇湖南省博物館進(jìn)行爬取
- 在chrome或者新edge(賽高!7柚牲尺!)中找到湖南省博物館主頁打開
-
在檢查模式中我們不斷下拉觀察network中xhr的變化
第一個
第二個
-
我們發(fā)現(xiàn)在頁面動態(tài)加載的過程中 sice_id的變化標(biāo)志著頁面的變化,那么sice_id的規(guī)律在哪呢幌蚊?
example
我們發(fā)現(xiàn)sice_id在上一個中cardlistInfo這個字典中有相關(guān)的數(shù)據(jù)
- 而在mblog中有我們想要的數(shù)據(jù)
example
程序?qū)崿F(xiàn)
url太長現(xiàn)在不寫了就
- 導(dǎo)入相關(guān)的庫
import requests
import json
import pprint
import re
- 請求url谤碳,獲取json數(shù)據(jù)
url = ''
while True:
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) +'
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163+'
' Safari/537.36 Edg/80.0.361.111' }
req = requests.get(url, headers=headers).text
data = json.loads(req)
- 獲取data下的cards, cardlistInfo
users = data['data']['cards']
since_id = data['data']['cardlistInfo']
#print(type(since_id))
- 我們可以知道sice_id是一個字典溢豆,獲取其中的since_id
for k, v in since_id.items():
if k == 'since_id':
a = v
- 對url中的since_id進(jìn)行變換
url = '......since_id='+str(a)
- 獲取點贊蜒简,評論,轉(zhuǎn)發(fā)沫换,微博內(nèi)容等臭蚁,并以字典形式存儲、打印
mblog = []
for user in users:
# pprint.pprint(user['mblog'])
mblog.append(user['mblog'])
dic = {}
for text in mblog:
#正則表達(dá)式去除無用標(biāo)簽
span = re.sub('<span(.*?)</span>', '', text['text'])
word = re.sub('<a(.*?)</a>', '', span)
information = re.sub('<br(.*?)<br />', '', word)
i = i+1
dic['序號: '] = i
dic['時間: '] = text['created_at']
dic['點贊: '] = text['attitudes_count']
dic['評論: '] = text['comments_count']
dic['轉(zhuǎn)發(fā): '] = text['reposts_count']
dic['內(nèi)容: '] = information
for k, v in dic.items():
print(k, v)
整個程序需要完善的地方還有很多(比如while循環(huán)無跳出)讯赏,在代碼效率垮兑,數(shù)據(jù)存儲,防反爬取等方面還有很多的不足漱挎,接受批評指正一起共同進(jìn)步