翻页爬取果壳问答
翻頁爬取果殼問答
本次案例的目的:為了重點(diǎn)介紹一下如何提取響應(yīng)數(shù)據(jù)中的html數(shù)據(jù)。
爬取過程:
1.找到目標(biāo)的url
2.構(gòu)造請(qǐng)求頭參數(shù)
3.發(fā)送請(qǐng)求,獲取響應(yīng)
4.解析數(shù)據(jù)
5.保存數(shù)據(jù)
爬取過程需要注意的點(diǎn):
1.創(chuàng)建翻頁
通過requests翻頁爬取數(shù)據(jù),需要?jiǎng)?chuàng)建for循環(huán),并且找到url的規(guī)律并且格式化輸出。
2.添加if判斷語序
由于第一頁的url沒有page參數(shù),所以第一頁的url需要單獨(dú)列舉。
3.解析數(shù)據(jù)時(shí),需要通過xpathhelper協(xié)助找到數(shù)據(jù)所在的html節(jié)點(diǎn)
4.在同一個(gè)pycharm文件中保存文本數(shù)據(jù)時(shí),寫入方式為“a追加的方式”。
首先找到目標(biāo)的url:
找到不同頁url的規(guī)律:
由前三頁的url,我們可以的到的規(guī)律是:
第一頁沒有page參數(shù),從第二頁開始,page參數(shù)的值為2,第三頁為3…依次類推,因此,我們for循環(huán)的規(guī)律為如果i=0,那么page參數(shù)就不存在,否則page = i+1 。
解析數(shù)據(jù)
我們鼠標(biāo)右鍵點(diǎn)擊標(biāo)題,點(diǎn)擊檢查可以找到問題和回答所在的節(jié)點(diǎn)。
那么檢驗(yàn)提取數(shù)據(jù)提取的方式就通過xpathhelper來完成:
通過節(jié)點(diǎn)的位置和節(jié)點(diǎn)所攜帶的屬性,對(duì)目標(biāo)文本進(jìn)行定位。
翻頁規(guī)律和數(shù)據(jù)解析方法已確定,開始我們的代碼:
import requests from lxml import etree import jsonif __name__ == '__main__':# 輸入爬取的頁數(shù)pages = int(input('請(qǐng)輸入要爬取的頁數(shù):'))for i in range(pages):# 確認(rèn)目標(biāo)的urlif i == 0:url = 'https://www.guokr.com/i/1948640618/answers/'else:page = i+1url = f'https://www.guokr.com/i/1948640618/answers/?page={page}'# 構(gòu)造請(qǐng)求頭參數(shù)headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36'}# 發(fā)送請(qǐng)求,獲取響應(yīng)response = requests.get(url,headers=headers)# 數(shù)據(jù)為html數(shù)據(jù)str_data = response.textpy_data = etree.HTML(str_data)# 提取目標(biāo)數(shù)據(jù) 1.問題,2.回答question_list = py_data.xpath('//h4/a[@target="_blank"]/text()')answer_list = py_data.xpath('//li/p/text()')# 保存為字典的形式for i in range(len(question_list)):dict_ = {}dict_[question_list[i]] = answer_list[i]# 將字典轉(zhuǎn)化成json數(shù)據(jù)json_data = json.dumps(dict_,ensure_ascii=False)+',\n'# 保存數(shù)據(jù)with open('翻頁果殼問答3.json','a',encoding='utf-8')as f:f.write(json_data)我爬取了3頁,因?yàn)槊恳豁摰膯栴}和回答的個(gè)數(shù)并不是固定的,(第一頁10個(gè),第二頁2個(gè),第三頁7個(gè))得到的數(shù)據(jù)如下:
這里說明一下為什么要用json文件保存數(shù)據(jù):是為了讓字典形式的數(shù)據(jù)更加直觀和美觀,方便我們查看。
總結(jié)
- 上一篇: 看看阿里、百度、华为等互联网公司的年终奖
- 下一篇: 因为计算机丢失D3DCOMPILER_4