本節(jié)講解 Python Selenium 爬蟲實戰(zhàn)案例,通過對實戰(zhàn)案例的講解讓您進一步認識 Selenium 框架。
實戰(zhàn)案例目標:抓取京東商城(https://www.jd.com/)商品名稱、商品價格、評論數(shù)量,以及商鋪名稱。比如輸入搜索“Python書籍”,則抓取如下數(shù)據(jù):
{'name': 'Python編程 從入門到實踐 第2版 人民郵電出版社', 'price': '¥52.50', 'count': '200+條評價', 'shop': '智囊圖書專營店'}
{'name': 'Python編程 從入門到實踐 第2版(圖靈出品)', 'price': '¥62.10', 'count': '20萬+條評價', 'shop': '人民郵電出版社'}
...
Selenium 框架的學習重點在于定位元素節(jié)點,關于如何定位,我們已經(jīng)介紹了 8 種方法,其中 Xpath 表達式適用性強,并且便捷。因此,建議大家多多熟悉 Xpath 表達式的相關語法規(guī)則。本節(jié)案例中很大一部分采用了 Xpath 表達式定位元素,希望幫助您溫故知新。
本節(jié)案例中涉及了幾個技術難點:第一,如何下拉滾動條下載商品,第二,如何實現(xiàn)翻頁,也就是抓取下一頁的內(nèi)容,第三,如何判斷數(shù)據(jù)已經(jīng)抓取完畢,即終止頁。下面我們逐步講解。
實現(xiàn)自動搜索
實現(xiàn)自動輸出、自動搜索是最基礎的一步。首先定位輸入框的的節(jié)點,其次定位搜索按鈕節(jié)點,這與實現(xiàn)百度自動搜索思路一致,最關鍵就是要正確定位元素節(jié)點。
通過開發(fā)者調(diào)試工具檢查相應的的位置,可得如下 Xpath 表達式:
**
輸入框表達式://*[@id="key"]
搜索按鈕表達式://*[@class='form']/button
代碼如下所示:
- from selenium import webdriver
- broswer=webdriver.Chrome()
- broswer.get(‘https://www.jd.com/’)
- broswer.find_element_by_xpath(‘//*[@id=“key”]’).send_keys(“python書籍”)
- broswer.find_element_by_xpath(“//*[@class=‘form’]/button”).click()
滾動滑動條
實現(xiàn)了自動搜索后,接下來就是要抓取頁面中的商品信息,而您會發(fā)現(xiàn)只有將滑動條滾動至底部,商品才會全部加載完畢。滾動滑輪操作的代碼如下:
-
scrollTo(xpos,ypos)
-
execute_script()執(zhí)行js語句,拉動進度條件
- #scrollHeight屬性,表示可滾動內(nèi)容的高度
- self.browser.execute_script(
- ‘window.scrollTo(0,document.body.scrollHeight)’#拉動進度條至底部
- )
之后在通過 Xpath 表達式匹配所有商品,并將它們放入一個大列表中,通過循環(huán)列表取出每個商品,最后提取出想要的信息。
- li_list=self.browser.find_elements_by_xpath(‘//*[@id=“J_goodsList”]/ul/li’)
- for li in li_list:
- item={}
-
提取商品名
- item[‘name’]=li.find_element_by_xpath(‘.//div[@class=“p-name”]/a/em’).text.strip()
-
提取價格
- item[‘price’]=li.find_element_by_xpath(‘.//div[@class=“p-price”]’).text.strip()
-
提取評論數(shù)量
- item[‘count’]=li.find_element_by_xpath(‘.//div[@class=“p-commit”]/strong’).text.strip()
-
提取商家店鋪
- item[‘shop’]=li.find_element_by_xpath(‘.//div[@class=“p-shopnum”]’).text.strip()
實現(xiàn)翻頁抓取
如何實現(xiàn)翻頁抓取數(shù)據(jù),并判斷數(shù)據(jù)數(shù)據(jù)已經(jīng)抓取完畢呢?這其實并不難想到,我們可以先跳至終止頁(即最后一頁)。此時最后一頁的“下一頁”處于不可用狀態(tài),其元素節(jié)點如下:
**
終止頁下一頁class屬性:<a class="pn-next disabled"><em>下一頁</em><i> > </i></a>
其他頁下一頁class屬性:<a class="pn-next" onclick="SEARCH.page(3, true)" ...><em>下一頁</em><i> > </i></a>
如果頁面源碼中有上述代碼存在,則證明此頁是最后一頁,若沒有則不是。因此通過 if …else 語句即可實現(xiàn)上述需求,如下所示:
- #-1說明沒找到,不是最后一頁,執(zhí)行點擊 “下一頁” 操作
- if self.browser.page_source.find(‘pn-next disabled’)==-1:
- browser.find_element_by_class_name(‘pn-next’).click()
完整程序代碼
完整程序代碼如下所示:
- #coding:utf8
- from selenium import webdriver
- import time
- import pymongo
- class JdSpider(object):
- def init(self):
- self.url=‘http://www.jd.com/’
- self.options=webdriver.ChromeOptions() # 無頭模式
- self.options.add_argument(‘–headless’)
- self.browser=webdriver.Chrome(options=self.options) # 創(chuàng)建無界面參數(shù)的瀏覽器對象
- self.i=0 #計數(shù),一共有多少件商品
- #輸入地址+輸入商品+點擊按鈕,切記這里元素節(jié)點是京東首頁的輸入欄、搜索按鈕
- def get_html(self):
- self.browser.get(self.url)
- self.browser.find_element_by_xpath(‘//*[@id=“key”]’).send_keys(‘python書籍’)
- self.browser.find_element_by_xpath(“//*[@class=‘form’]/button”).click()
- #把進度條件拉倒最底部+提取商品信息
- def get_data(self):
-
執(zhí)行js語句,拉動進度條件
- self.browser.execute_script(
- ‘window.scrollTo(0,document.body.scrollHeight)’
- )
-
給頁面元素加載時預留時間
- time.sleep(2)
- #用 xpath 提取每頁中所有商品,最終形成一個大列表
- li_list=self.browser.find_elements_by_xpath(‘//*[@id=“J_goodsList”]/ul/li’)
- for li in li_list:
- #構建空字典
- item={}
- item[‘name’]=li.find_element_by_xpath(‘.//div[@class=“p-name”]/a/em’).text.strip()
- item[‘price’]=li.find_element_by_xpath(‘.//div[@class=“p-price”]’).text.strip()
- item[‘count’]=li.find_element_by_xpath(‘.//div[@class=“p-commit”]/strong’).text.strip()
- item[‘shop’]=li.find_element_by_xpath(‘.//div[@class=“p-shopnum”]’).text.strip()
- print(item)
- self.i+=1
- def run(self):
- #搜索出想要抓取商品的頁面
- self.get_html()
- #循環(huán)執(zhí)行點擊“下一頁”操作
- while True:
- #獲取每一頁要抓取的數(shù)據(jù)
- self.get_data()
- #判斷是否是最一頁
- if self.browser.page_source.find(‘pn-next disabled’)==-1:
- self.browser.find_element_by_class_name(‘pn-next’).click()
- #預留元素加載時間
- time.sleep(1)
- else:
- print(‘數(shù)量’,self.i)
- break
- if name == ‘main’:
- spider=JdSpider()
- spider.run()
輸出結(jié)果如下:
{'name': 'Python編程 從入門到實踐 第2版(圖靈出品) 人民郵電出版社', 'price': '¥52.50', 'count': '200+條評價', 'shop': '智囊圖書專營店'}
{'name': 'Python編程 從入門到實踐 第2版(圖靈出品)', 'price': '¥62.10', 'count': '20萬+條評價', 'shop': '人民郵電出版社'}
{'name': 'Python編程三劍客:Python編程從入門到實踐第2版+快速上手第2版+極客編程(套裝共3冊)', 'price': '¥206.90', 'count': '5萬+條評價', 'shop': '人民郵電出版社'}
{'name': 'Python數(shù)據(jù)分析從入門到實踐(excel高效辦公)(3全彩版)', 'price': '¥46.10', 'count': '10萬+條評價', 'shop': '明日科技京東自營旗艦店'}
{'name': '零基礎學Python(編程入門 項目實踐 同步視頻)(3全彩版)', 'price': '¥37.50', 'count': '10萬+條評價', 'shop': '明日科技京東自營旗艦店'}
{'name': 'Python編程快速上手 讓繁瑣工作自動化 第2版', 'price': '¥44.50', 'count': '10萬+條評價', 'shop': '人民郵電出版社'}
{'name': '現(xiàn)貨包郵Python學習手冊(原書第5版)上下冊2本/計算機編程設計|8053406', 'price': '¥142.30', 'count': '100+條評價', 'shop': '互動創(chuàng)新圖書專營店'}
{'name': '零基礎入門學習Python(第2版)', 'price': '¥70.30', 'count': '1萬+條評價', 'shop': '清華大學出版社'}
{'name': '超簡單:用Python讓Excel飛起來', 'price': '¥34.90', 'count': '2萬+條評價', 'shop': '機械工業(yè)出版社自營官方旗艦店'}
{'name': '流暢的Python(圖靈出品)', 'price': '¥109.80', 'count': '2萬+條評價', 'shop': '人民郵電出版社'}
{'name': 'Python編程從入門到實踐第二版 python編程從入門到實戰(zhàn)零基礎自學教程計算機基礎語言數(shù)據(jù)分析', 'price': '¥49.80', 'count': '5000+條評價', 'shop': '墨馬圖書旗艦店'}
{'name': 'Python深度學習:基于PyTorch', 'price': '¥73.40', 'count': '5萬+條評價', 'shop': '機械工業(yè)出版社自營官方旗艦店'}
{'name': 'Python自然語言處理實戰(zhàn):核心技術與算法 自然語言處理教程', 'price': '¥48.30', 'count': '37條評價', 'shop': '芝麻開門圖書專營店'}
{'name': 'Effective Python:編寫高質(zhì)量Python代碼的90個有效方法(原書第2版)', 'price': '¥110.60\n¥105.10', 'count': '2萬+條評價', 'shop': '機械工業(yè)出版社自營官方旗艦店'}
...
Selenium 自動化爬蟲讓你無須關心網(wǎng)站的類型(靜態(tài)或者動態(tài)),只需您按部就班的尋找元素節(jié)點,并依此點擊,即可實現(xiàn)數(shù)據(jù)抓取。不過 Selenium 最大的缺點就是效率低,因此它只適合做小規(guī)模的數(shù)據(jù)采集工作。
這里給大家分享一份Python全套學習資料,包括學習路線、軟件、源碼、視頻、面試題等等,都是我自己學習時整理的,希望可以對正在學習或者想要學習Python的朋友有幫助!
CSDN大禮包:全網(wǎng)最全《全套Python學習資料》免費分享??
??有需要的小伙伴,可以點擊下方鏈接免費領取或者V掃描下方二維碼免費領取??
??CSDN大禮包??:全網(wǎng)最全《Python學習資料》免費分享(安全鏈接,放心點擊)??文章來源:http://www.zghlxwxcb.cn/news/detail-808328.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-808328.html
1??零基礎入門
① 學習路線
對于從來沒有接觸過Python的同學,我們幫你準備了詳細的學習成長路線圖??梢哉f是最科學最系統(tǒng)的學習路線,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。
② 路線對應學習視頻
還有很多適合0基礎入門的學習視頻,有了這些視頻,輕輕松松上手Python~
③練習題
每節(jié)視頻課后,都有對應的練習題哦,可以檢驗學習成果哈哈!
因篇幅有限,僅展示部分資料
2??國內(nèi)外Python書籍、文檔
① 文檔和書籍資料
3??Python工具包+項目源碼合集
①Python工具包
學習Python常用的開發(fā)軟件都在這里了!每個都有詳細的安裝教程,保證你可以安裝成功哦!
②Python實戰(zhàn)案例
光學理論是沒用的,要學會跟著一起敲代碼,動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰(zhàn)案例來學習。100+實戰(zhàn)案例源碼等你來拿!
③Python小游戲源碼
如果覺得上面的實戰(zhàn)案例有點枯燥,可以試試自己用Python編寫小游戲,讓你的學習過程中增添一點趣味!
4??Python面試題
我們學會了Python之后,有了技能就可以出去找工作啦!下面這些面試題是都來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠,并且有阿里大佬給出了權威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
5??Python兼職渠道
而且學會Python以后,還可以在各大兼職平臺接單賺錢,各種兼職渠道+兼職注意事項+如何和客戶溝通,我都整理成文檔了。
上述所有資料 ?? ,朋友們?nèi)绻行枰???《全套Python學習資料》的,可以掃描下方二維碼免費領取 ??
??有需要的小伙伴,可以點擊下方鏈接免費領取或者V掃描下方二維碼免費領取??
??CSDN大禮包??:全網(wǎng)最全《Python學習資料》免費分享(安全鏈接,放心點擊)??
?
到了這里,關于Python Selenium爬蟲實戰(zhàn)應用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!