利用selenium嘗試爬取豆瓣圖書



目錄

  • 1、小小課堂html

  • 2、selenium+driver初步嘗試控制瀏覽器python

  • 3、完整代碼nginx

  • 4、運行結果web



連接:https://search.douban.com/book/subject_search?search_text=python&cat=1001


首先咱們須要先找下有沒有接口

可是經過查看,咱們發現是沒有接口的。通過分析,這個網站展現的數據,不能經過以前的方式獲取,猜測是經過加密解密獲得的內容。這個時候有兩種方式
a:找到加密解密的接口,使用python模擬(至關複雜,必須有解析js的能力)
b:使用selenium+driver直接獲取解析後的頁面數據內容(這種相對簡單)

固然了,咱們只是分析了接口這一部分,其實咱們經過查看網頁源碼,使用xpath進行嘗試解析,發現實際上是可行的,可是因爲本文使用的是自動化工具selenium,因此就不過多解釋xpath。

在這裏,咱們使用selenium+driver能模擬瀏覽器找到elements裏的內容,這樣再提取就沒問題了。


接下來咱們須要瞭解一些概念chrome

1.什麼是selenium?
selenium是網頁自動化測試工具,能夠自動化的操做瀏覽器。若是須要操做哪一個瀏覽器須要安裝對應的driver,好比你須要經過selenium操做chrome,那必須安裝chromedriver,並且版本與chrome保持一致。npm

 二、driver
操做瀏覽器的驅動,分爲有界面和無界面的
有界面:與本地安裝好的瀏覽器一致的driver(用戶能夠直接觀看,交互好比單擊、輸入)
無界面:phantomjs(看不到,只能經過代碼操做,加載速度比有界面的要快)編程


瞭解完以後,安裝selenium:瀏覽器

pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple


下載driver:
ruby

 1. phantomjs
phantomjs下載網址https://phantomjs.org/download.html
微信

2. chrome谷歌瀏覽器對應的driver
http://npm.taobao.org/mirrors/chromedriver/

下載好以後,放入項目中,方便找到。

2、selenium+driver初步嘗試控制瀏覽器


說到模擬,那咱們就先來模擬如何打開豆瓣圖書並打開Python相關的圖書

from selenium import webdriverimport timeimport requests
start_url = "https://book.douban.com/subject_search?search_text=python&cat=1001&start=%25s0"
# 控制chrome瀏覽器driver = webdriver.Chrome("./chromedriver/chromedriver.exe")# 輸入網址driver.get(start_url)
# 停一下,等待數據加載完畢time.sleep(2)# 獲取網頁內容Elementscontent = driver.page_source# 結束driver.quit()



🆗,說明咱們可以控制瀏覽器進行操做,那麼這樣咱們就能夠進行下一步操做了。

咱們首先先提取數據

# 獲取網頁內容Elementscontent = driver.page_source
# 提取數據print(content)



提取到數據後,咱們查到裏面是否存在咱們所要爬取的圖書,在此咱們以《Python編程 : 從入門到實踐》爲切入點

這個時候,咱們首先要查看這個頁面內是否存在有iframe

經過查找,咱們發如今咱們要爬取的部分是沒有iframe存在的,所以咱們能夠直接使用xpath進行解析。

先查看網頁源碼,而後嘗試解析

 1. 解析總體部分

 2. 解析書名

3. 解析評分

4.解析其餘

🆗到這裏咱們就解析完成了,可是咱們若是直接這樣寫的話,實際上是有點問題的,問題是什麼呢?咱們能夠看下結果

代碼以下:

data_list = etree.HTML(content).xpath('//div[@class="item-root"]')# print(data_list)for data in data_list: item = {} item["name"] = data.xpath("./div/div[1]/a/text()") item["score"] = data.xpath("./div/div[2]/span[2]/text()") item["others"] = data.xpath("./div/div[3]/text()") print(item)


咱們能夠看到標紅處,有的數據是獲取不到的,這難道是咱們代碼有問題嗎?其實咱們的代碼並無問題。咱們看下網頁


咱們能夠很清楚的看到,第一個<div class = "item-root"></div>並非咱們所要找的書籍,所以咱們能夠從第二個進行爬取。
修改後的代碼以下

data_list = etree.HTML(content).xpath('//div[@class="item-root"]')[1:]# print(data_list)for data in data_list: item = {} item["name"] = data.xpath("./div/div[1]/a/text()")[0] item["score"] = data.xpath("./div/div[2]/span[2]/text()")[0] item["others"] = data.xpath("./div/div[3]/text()")[0] print(item)


這個時候,就是咱們須要的內容了。內容的問題解決了,下面就須要考慮自動翻頁了。

咱們經過查看網頁的翻頁過程,以下:

經過觀察翻頁部分的網頁就夠,咱們能夠之後頁爲關鍵詞選取其中的href自動翻轉到下一頁。順便再加上一個斷定若是沒有就自動中止。

咱們下用xpath進行分析

代碼以下

 # 找到後頁 next = driver.find_element_by_xpath('//a[contains(text(),"後頁")]') # 判斷 if next.get_attribute("href"): # 單擊 next.click() else: # 跳出循環 break


3、完整代碼



# encoding: utf-8'''  @author 李運辰  @create 2020-11-21 11:34 @software: Pycharm @file: 豆瓣圖書.py @Version:1.0 '''from selenium import webdriverfrom lxml import etreeimport osimport timeimport requestsimport reimport csv
start_url = "https://book.douban.com/subject_search?search_text=python&cat=1001&start=%25s0"
# 控制chrome瀏覽器driver = webdriver.Chrome("./chromedriver/chromedriver.exe")# 輸入網址driver.get(start_url)while True: # 停一下,等待加載完畢 time.sleep(2) # 獲取網頁內容Elements content = driver.page_source # 提取數據 data_list = etree.HTML(content).xpath('//div[@class="item-root"]')[1:] for data in data_list: item = {} item["name"] = data.xpath("./div/div[1]/a/text()")[0] item["score"] = data.xpath("./div/div[2]/span[2]/text()")[0] with open("./豆瓣圖書.csv", "a", encoding="utf-8") as file: writer = csv.writer(file) writer.writerow(item.values()) print(item) # 找到後頁 next = driver.find_element_by_xpath('//a[contains(text(),"後頁")]') # 判斷 if next.get_attribute("href"): # 單擊 next.click() else: # 跳出循環 break# 結束driver.quit()

4、運行結果




- END -



歡迎關注公衆號:Python爬蟲數據分析挖掘,方便及時閱讀最新文章

記錄學習python的點點滴滴;

回覆【開源源碼】免費獲取更多開源項目源碼;

本文分享自微信公衆號 - Python爬蟲數據分析挖掘(zyzx3344)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索