爬取網(wǎng)址:http://www.reibang.com/u/9104ebf5e177
爬取信息:用戶動(dòng)態(tài)類(lèi)型怪嫌,時(shí)間信息
爬取方式:使用bs4解析。
存儲(chǔ)方式:打印出來(lái)
①爬取簡(jiǎn)書(shū)羅羅攀的用戶動(dòng)態(tài)信息:
②從打開(kāi)URL到選擇單擊“動(dòng)態(tài)”鏈接,網(wǎng)頁(yè)URL沒(méi)有發(fā)生該表,證明網(wǎng)頁(yè)采用了異步加載技術(shù)。
利用Chrome的Network選項(xiàng)卡巴帮,選擇XHR項(xiàng),可以看到用戶加載的動(dòng)態(tài)文件虐秋。
③從Response項(xiàng)中可以看到每個(gè)LI標(biāo)簽就包含了一個(gè)用戶動(dòng)態(tài)內(nèi)容榕茧,例如“關(guān)注了作者”,“喜歡了文章 ”客给,"發(fā)表了評(píng)論"等用押。經(jīng)過(guò)確認(rèn),網(wǎng)址可以精簡(jiǎn)成:http://www.reibang.com/users/9104ebf5e177/timeline
④通過(guò)下拉瀏覽發(fā)現(xiàn)網(wǎng)頁(yè)采用Ajax進(jìn)行分頁(yè)處理:
⑤通過(guò)手工刪除URL中的max_id字段靶剑,發(fā)現(xiàn)不能返回正常加載的內(nèi)容蜻拨,僅停留在首頁(yè)動(dòng)態(tài)當(dāng)中池充。
而且每個(gè)頁(yè)面的max_id都不同,數(shù)字規(guī)律也不是很明顯缎讼,所以接下來(lái)構(gòu)造URL的重點(diǎn)在于獲取max_id的數(shù)字收夸。
⑥經(jīng)分析,原來(lái)數(shù)字的規(guī)律是這樣子的血崭,如下圖所示:
第一頁(yè)最后一個(gè)li標(biāo)簽中的id數(shù)字 = 第二頁(yè)URL中的max數(shù)字 + 1
⑦由于Response返回的是XML文檔卧惜,所以使用bs4的Lxml解析方法進(jìn)行數(shù)據(jù)抓取工作。
抓取數(shù)據(jù)為:data-type和data-datetime夹纫。
⑧最后把結(jié)果打印出來(lái)咽瓷。
代碼如下:
import requests
from bs4 import BeautifulSoup
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3294.6 Safari/537.36'}
##獲取data_type和datetime信息。
def get_info(url):
r = requests.get(url,headers = headers)
soup = BeautifulSoup(r.text,"lxml")
infos = soup.select("ul.note-list li")
for info in infos:
data_type = info.select("div.author span")[0].get("data-type")
datetime = info.select("div.author span")[0].get("data-datetime")
print(data_type,datetime)
##獲取max_id信息
def get_id(url):
r = requests.get(url,headers = headers)
soup = BeautifulSoup(r.text,"lxml")
max_id = soup.select("ul.note-list li")[-1].get("id").split("-")[1]
return int(max_id)
if __name__ == "__main__":
start_url = "http://www.reibang.com/users/9104ebf5e177/timeline"
get_info(start_url)
max_id = get_id(start_url) + 1
#利用循環(huán)代替遞歸函數(shù)舰讹。
for page in range(2,11):
next_url = "http://www.reibang.com/users/9104ebf5e177/timeline?max_id={}&page={}".format(max_id, page)
get_info(next_url)
max_id = get_id(next_url) + 1
部分結(jié)果為:
like_user 2018-02-20T13:21:20+08:00
like_note 2018-02-20T12:45:47+08:00
comment_note 2018-02-17T09:31:48+08:00
like_note 2018-02-16T20:26:10+08:00
like_note 2018-02-15T16:13:39+08:00
...
comment_note 2017-08-22T17:50:54+08:00
like_note 2017-08-22T17:50:11+08:00
like_note 2017-08-22T16:40:18+08:00
like_user 2017-08-22T16:39:54+08:00
comment_note 2017-08-22T16:38:54+08:00