Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

程式設計師啟航發表於2019-07-19

來啦,老弟

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

我們已經知道怎麼使用

Requests]

進行各種請求騷操作

也知道了對伺服器返回的資料如何使用

正規表示式

來過濾我們想要的內容

...

那麼接下來

我們就使用 requests 和 re 來寫一個爬蟲

作為一個愛看書的你(說的跟真的似的)

學習過程中有不懂的可以加入我們的學習交流秋秋圈784中間758後面214,與你分享Python企業當下人才需求及怎麼從零基礎學習Python,和學習什麼內容。相關學習視訊資料、開發工具都有分享

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

怎麼能發現好書呢?

所以我們

爬取噹噹網的前 **500 **本好五星評書籍

怎麼樣?

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

ok

接下來就是

學習 python 的正確姿勢

請在電腦的陪同下

邊看本文邊練習

首先我們要對我們的目標網站進行分析

先摸清對方的底

我們才能戰無不勝

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

開啟這個書籍排行榜的地址

http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-1

我們可以看到是這樣的一個網頁

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

每一頁顯示 20 本書

當我們點選下一頁的時候

你可以發現地址變了

http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-2

也就是我們翻到第幾頁的時候

連結地址的最後一個引數會跟著變

那麼我們等會在 python 中可以用一個變數

來實現獲取不同頁數的內容

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

接著

用我們之前說的   Chrome   騷操作

來分析一下

我們要的內容是怎麼請求的

以及

返回給我們的原始碼是什麼樣的

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

可以看到

我們通過 GET 請求

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

我們的請求頭

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

這是伺服器返回來的資料

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

接著我們再來分析一下我們要抓取的關鍵資訊

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

我們要的就是前 500 本書的

排名

書名

圖片地址

作者

推薦指數

五星評分次數

價格

通過原始碼我們可以看到

這些資訊被放在了 <li> 標籤中

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

那麼我們等會就可以使用

來進行過濾我們要的資訊

一頓分析完了之後

接下來擼程式碼了

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

主要思路

使用 page 變數來實現翻頁

我們使用 requests 請求噹噹網

然後將返回的 HTML 進行正則解析

由於我們暫時還沒學到 資料庫

所以解析完之後就把內容存到檔案中

def main(page):
   url = 'http://bang.dangdang.com/books/fivestars/01.00.00.00.00.00-recent30-0-0-1-' + str(page)
    html = request_dandan(url)
   items = parse_result(html) # 解析過濾我們想要的資訊
   for item in items:
       write_item_to_file(item)
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

請求噹噹網

當我們請求成功之後

拿到原始碼

def request_dandan(url):
   try:
       response = requests.get(url)
       if response.status_code == 200:
           return response.text
   except requests.RequestException:
       return None
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

拿到原始碼了

就要對其解析

使用正規表示式獲取我們想要的關鍵資訊

獲取到了之後我們封裝一下資料

def parse_result(html):
   pattern = re.compile('<li>.*?list_num.*?(\d+).</div>.*?<img src="(.*?)".*?class="name".*?title="(.*?)">.*?class="star">.*?class="tuijian">(.*?)</span>.*?class="publisher_info">.*?target="_blank">(.*?)</a>.*?class="biaosheng">.*?<span>(.*?)</span></div>.*?<p><span\sclass="price_n">&yen;(.*?)</span>.*?</li>',re.S)
    items = re.findall(pattern,html)
   for item in items:
       yield {
           'range': item[0],
           'iamge': item[1],
           'title': item[2],
           'recommend': item[3],
           'author': item[4],
           'times': item[5],
           'price': item[6]
       }
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

列印一下看看結果

for item in items:
       print(item)
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

可以看到這樣的資料

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

沒毛病

現在我們獲取的是第 1 頁的資料

如何自動獲取 25 頁 500 條資料呢

來個 for 迴圈唄

if __name__ == "__main__":
   for i in range(1,26):
       main(i)
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

獲取完 500 本書的資料之後

存到 book.txt 檔案

def write_item_to_file(item):
   print('開始寫入資料 ====> ' + str(item))
   with open('book.txt', 'a', encoding='UTF-8') as f:
       f.write(json.dumps(item, ensure_ascii=False) + '\n')
       f.close()
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

完成

專案跑起來

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍
Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

開啟我們儲存的 book.txt 看看

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍

前 500 本書的資料就被我們拿到啦

Python第一個爬蟲,爬取噹噹網 Top 500 本五星好評書籍


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913713/viewspace-2651170/,如需轉載,請註明出處,否則將追究法律責任。

相關文章