一、爬取案例-豆瓣讀書TOP250
上一期給大家分享了個python爬蟲案例:豆瓣電影TOP250的排行榜資料爬取
【python爬蟲案例】利用python爬蟲爬取豆瓣電影評分TOP250排行資料!
今天再給大家分享一下:豆瓣讀書排行榜TOP250的python爬蟲案例!
因為是同一個網站,所以流程和邏輯上都是差不多的。
這次爬取的目標網址是:https://book.douban.com/top250
老規矩!咱們以目標為驅動,以興趣為導向,先來看下爬蟲程式執行後得到的excel文件資料
那程式碼是如何實現豆瓣讀書TOP250資料爬取的了?下面逐一講解一下python實現。
二、豆瓣讀書TOP250網站分析
透過瀏覽器F12檢視所有請求,發現他並沒有傳送ajax請求,那說明我們要的TOP250的排行榜資料大機率是在html頁面內容上。
於是我們 點選右鍵->檢視網頁原始碼 ,發現我們需要的豆瓣讀書評分的排行榜資料都在html頁面裡
這就簡單了,我們直接往下看,上程式碼。
三、python爬蟲程式碼詳解
首先,匯入我們需要用到的庫
import requests # 發請求
from lxml import etree # 解析html
import pandas as pd # 存取csv
然後,向豆瓣讀書TOP250的網頁發起請求,獲得html頁面內容
page_source = requests.get(page_url, headers=headers).text
用lxml庫解析html頁面
tree = etree.HTML(page_source)
使用xpath來提取我們需要的書籍排行榜資料內容
# 獲得資料
tables = tree.xpath('//div[@id="content"]/div/div[1]/div/table')
for table in tables:
top = table.xpath(".//td[@valign='top']")[-1]
# 書名
book_name = extract_first(top.xpath("./div/a/text()")).strip()
# 豆瓣連結
url = extract_first(top.xpath("./div/a/@href")).strip()
# 作者、譯者、出版社、出版日期、價格
info = extract_first(top.xpath("./p[@class='pl']/text()")).strip()
# 評分
score = extract_first(top.xpath("./div[@class='star clearfix']/span[@class='rating_nums']/text()")).strip()
# 評分人數
star_people = extract_first(top.xpath("./div[@class='star clearfix']/span[@class='pl']/text()")).strip()
star_people_num = re.search("\d+", star_people).group()
# 一句話評價
one_evaluate = extract_first(top.xpath("./p[@class='quote']/span/text()")).strip()
其中,需要特殊說明的是,上面的info變數。
他裡面會包含:作者、譯者、出版社、出版日期、價格等資訊,提取的時候會有多種格式。
為了應對書籍資訊中列表的不同長度,所以會有如下應對不同格式的處理程式碼
infos = info.split("/")
if len(infos) == 5:
author = infos[0]
translator = infos[1]
publish = infos[2]
publish_date = infos[3]
price = infos[4]
elif len(infos) == 4:
author = infos[0]
publish = infos[1]
publish_date = infos[2]
price = infos[3]
elif len(infos) == 6 : # 有2個價格 第1頁:福爾摩斯探案全集
author = infos[0]
translator = infos[1]
publish = infos[2]
publish_date = infos[3]
price = str(infos[4]) + "/" + str(infos[5])
elif len(infos) == 3: # 沒有作者,且沒有譯者 第5頁:十萬個為什麼
publish = infos[0]
publish_date = infos[1]
price = infos[2]
else:
print(f"未匹配到的格式 書名={book_name}", infos)
最後,我們將爬蟲爬取的資料儲存到csv文件裡
def save_to_csv(csv_name):
"""
資料儲存到csv
@param csv_name: csv檔名字
@return:
"""
df = pd.DataFrame() # 初始化一個DataFrame物件
df['書名'] = book_names
df['豆瓣連結'] = book_urls
df['作者'] = authors
df['譯者'] = translators
df['出版社'] = publishers
df['出版日期'] = publish_dates
df['價格'] = prices
df['評分'] = scores
df['評分人數'] = star_peoples
df['一句話評價'] = one_evaluates
df.to_csv(csv_name, encoding='utf8') # 將資料儲存到csv檔案
上面的book_names、book_urls等變數都是使用的list來進行儲存的,這樣才能符合pandas匯出資料時的需要,最後呼叫to_csv()方法即可匯出豆瓣讀書的排行榜資料到文件裡了。
三、python爬蟲原始碼獲取
我是 @王哪跑,持續分享python乾貨,各類副業軟體!
附完整python原始碼及資料:【python爬蟲案例】利用python爬蟲爬取豆瓣讀書評分TOP250排行資料!