作者:徐浩 來源:人工智慧學習圈
3.2.1 目標
目標地址:https://book.douban.com/top250?start=0
任務:爬取豆瓣圖書TOP250,及其『書名』、『出版信息』、『評分』、『評價人數』四個數據
3.2.2 分析URL
首先先打開目標地址對url進行分析
觀察第一頁豆瓣圖書如下:
第二頁豆瓣圖書如下:
最後一頁豆瓣圖書如下:
我們可以發現url的結構是如何變化的,每一次的翻頁所對應改變的是start參數的值,那麼我們就可以構造urls:
3.2.3 請求網頁
我們看到其中有response.encoding = 'utf-8',這個可以根據標籤中的信息分析得到,還可以改為response.encoding=response.apparent_encoding
這個的意思是說,把響應的結果的 html 源碼的編碼格式設置成 utf-8,不這樣做的話,我們提取到的數據中如果有中文的,那顯示就會是亂碼
3.2.4 分析數據
滑鼠放在目標元素位置,右鍵-檢查,我們看到第一本書的我們需要的詳細信息都在 <tr> 裡面,
所以我們需要提取這一頁的所有的標籤:
infos = html.xpath('//tr[@class="item"]')
返回的是一個列表,再一次循環列表的每一個標籤,從中提取出對應的數據,其實不用提取數據的 xpath 路徑不需要去看路徑張啥樣在去手敲進去,可以複製得,但需要修改
我們以提取書名為例,在書名那裡右鍵-檢查,如下圖,複製出 xpath 路徑
粘貼代碼為://*[@id="content"]/div/div[1]/div/table[1]/tbody/tr/td[2]/div[1]/a
我們觀察我們已經提取的 tr 標籤 '//tr[@class="item"]' ,在看上面找到 tr ,以它為斷點(包含它),前面的刪掉改成如下:
name = info.xpath('./td[2]/div[1]/a/text()')[0]
因為我們已經提取了一大包含我們需要的數據的大標籤 tr,是從中再提取數據,所以前面多餘的刪掉,包含 tr 也刪掉,因為是從它的裡面提取
另外數據同理,所以可寫代碼:
提取後,我們需要用 replace 把多餘字符去掉,最後列印
到這裡接就完成了提取數據
3.2.5 小結
完整代碼如下:
運行結果如下:
歡迎大家加入人工智慧圈參與交流
原文連結: https://zhuanlan.zhihu.com/p/140246883