翻页爬取果壳问答
翻頁爬取果殼問答
本次案例的目的:為了重點介紹一下如何提取響應(yīng)數(shù)據(jù)中的html數(shù)據(jù)。
爬取過程:
1.找到目標的url
2.構(gòu)造請求頭參數(shù)
3.發(fā)送請求,獲取響應(yīng)
4.解析數(shù)據(jù)
5.保存數(shù)據(jù)
爬取過程需要注意的點:
1.創(chuàng)建翻頁
通過requests翻頁爬取數(shù)據(jù),需要創(chuàng)建for循環(huán),并且找到url的規(guī)律并且格式化輸出。
2.添加if判斷語序
由于第一頁的url沒有page參數(shù),所以第一頁的url需要單獨列舉。
3.解析數(shù)據(jù)時,需要通過xpathhelper協(xié)助找到數(shù)據(jù)所在的html節(jié)點
4.在同一個pycharm文件中保存文本數(shù)據(jù)時,寫入方式為“a追加的方式”。
首先找到目標的url:
找到不同頁url的規(guī)律:
由前三頁的url,我們可以的到的規(guī)律是:
第一頁沒有page參數(shù),從第二頁開始,page參數(shù)的值為2,第三頁為3…依次類推,因此,我們for循環(huán)的規(guī)律為如果i=0,那么page參數(shù)就不存在,否則page = i+1 。
解析數(shù)據(jù)
我們鼠標右鍵點擊標題,點擊檢查可以找到問題和回答所在的節(jié)點。
那么檢驗提取數(shù)據(jù)提取的方式就通過xpathhelper來完成:
通過節(jié)點的位置和節(jié)點所攜帶的屬性,對目標文本進行定位。
翻頁規(guī)律和數(shù)據(jù)解析方法已確定,開始我們的代碼:
import requests from lxml import etree import jsonif __name__ == '__main__':# 輸入爬取的頁數(shù)pages = int(input('請輸入要爬取的頁數(shù):'))for i in range(pages):# 確認目標的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)造請求頭參數(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ā)送請求,獲取響應(yīng)response = requests.get(url,headers=headers)# 數(shù)據(jù)為html數(shù)據(jù)str_data = response.textpy_data = etree.HTML(str_data)# 提取目標數(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頁,因為每一頁的問題和回答的個數(shù)并不是固定的,(第一頁10個,第二頁2個,第三頁7個)得到的數(shù)據(jù)如下:
這里說明一下為什么要用json文件保存數(shù)據(jù):是為了讓字典形式的數(shù)據(jù)更加直觀和美觀,方便我們查看。
總結(jié)
- 上一篇: 看看阿里、百度、华为等互联网公司的年终奖
- 下一篇: 因为计算机丢失D3DCOMPILER_4