Python爬蟲 | Selenium爬取當(dāng)當(dāng)暢銷圖書排行
點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
江漢曾為客,相逢每醉還。

01
前言
上篇文章我們爬取了今日頭條街拍美圖,心情相當(dāng)愉悅,今天這篇文章我們使用Selenium來(lái)爬取當(dāng)當(dāng)網(wǎng)的暢銷圖書排行。正所謂書中自有黃金屋,書中自有顏如玉,我們通過(guò)讀書學(xué)習(xí)來(lái)提高自身的才華,自然能有榮華富貴,也自然少不了漂亮小姐姐。 02
準(zhǔn)備工作
在爬取數(shù)據(jù)前,我們需要安裝Selenium庫(kù)以及Chrome瀏覽器,并配置好ChromeDriver。 03
Selenium
Selenium是一個(gè)自動(dòng)化測(cè)試工具,利用它可以驅(qū)動(dòng)瀏覽器執(zhí)行特定的動(dòng)作,如點(diǎn)擊、下拉等操作,同時(shí)還可以獲得瀏覽器當(dāng)前呈現(xiàn)的頁(yè)面的源代碼,做到可見(jiàn)即可爬。對(duì)于一些JavaScript動(dòng)態(tài)渲染的頁(yè)面來(lái)說(shuō),這種爬取方式非常有效。 Selenium庫(kù)的安裝比較簡(jiǎn)單一行代碼就行: pip install selenium 也可以到PyPI下載(https://pypi.python.org/pypi/selenium/#downloads)對(duì)應(yīng)的wheel文件,然后進(jìn)入到wheel文件目錄,使用pip安裝: pip install .........whl 安裝驗(yàn)證,進(jìn)入Python命令行交互模式,如下圖: 這樣Selenium就安裝完畢了。 04
ChromeDriver安裝
首先我們先查看Chrome的版本:點(diǎn)擊Chrome菜單“幫助”--->“關(guān)于Google Chrome”,即可查看Chrome的版本號(hào),如下圖: 打開ChromeDriver的官方網(wǎng)站,根據(jù)自身Chrome瀏覽器版本下載ChromeDriver并安裝: 注意:ChromeDriver和Chrome瀏覽器一定要對(duì)應(yīng),否則可能無(wú)法正常工作。 ChromeDriver的環(huán)境變量配置,直接將chromedriver.exe文件拖到Python的Scripts目錄下。 到這來(lái),準(zhǔn)備工作就完成了,下面我們正式開始抓取當(dāng)當(dāng)網(wǎng)的暢銷圖書排行。 05
實(shí)戰(zhàn)演練
首先,我們進(jìn)入當(dāng)當(dāng)網(wǎng)的暢銷圖書網(wǎng)頁(yè),我們要利用Selenium抓取圖書信息并用pyquery解析得到圖書的排名、圖片、名稱、價(jià)格、評(píng)論等信息。如下圖: 進(jìn)入開發(fā)者工具中的Network,查看Request URL,如下圖所示: 在頁(yè)面下方,有個(gè)分頁(yè)導(dǎo)航,我們點(diǎn)擊下一頁(yè),觀察Request URL的變化: http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-1 #第1頁(yè)
http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-2 #第2頁(yè)
http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-23 #第23頁(yè)
http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-page #第n頁(yè)我們發(fā)現(xiàn)該URL只有最后面的那個(gè)數(shù)字發(fā)生變化,所以我們構(gòu)造的URL就非常簡(jiǎn)單了,那個(gè)page就是翻頁(yè)的關(guān)鍵字。 06
首頁(yè)爬取
首先我們先聲明chrome瀏覽器對(duì)應(yīng),webdriver支持主流的瀏覽器,比如說(shuō):谷歌瀏覽器、火狐瀏覽器、IE瀏覽器等等。通過(guò)WebDriverWait()方法,指定最長(zhǎng)等待時(shí)間,當(dāng)規(guī)定時(shí)間內(nèi)沒(méi)加載出來(lái)就拋出異常。通過(guò)page參數(shù)來(lái)進(jìn)行翻頁(yè)。 代碼如下: browser=webdriver.Chrome()
wait=WebDriverWait(browser,10)
def index_page(page):
print('正在爬取第',page,'頁(yè)')
try:
url='http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-'+str(page)
browser.get(url)
get_booklist()
except TimeoutException:
index_page(page)07
解析商品列表
接下來(lái),我們就可以實(shí)現(xiàn)get_booklist()方法來(lái)解析商品列表了,這里我們直接調(diào)用page_source獲取頁(yè)面源代碼,然后用pyquery進(jìn)行解析,實(shí)現(xiàn)代碼如下: def get_booklist():
html=browser.page_source
doc=pq(html)
items=doc('.bang_list li').items()
for item in items:
book={
'排名':item.find('.list_num').text(),
'書名':item.find('.name').text(),
'圖片':item.find('.pic img').attr('src'),
'評(píng)論數(shù)':item.find('.star a').text(),
'推薦':item.find('.tuijian').text(),
'作者':item.find('.publisher_info a').text(),
'日期':item.find('.publisher_info span').text(),
'原價(jià)':item.find('.price_r').text().replace('¥',''),
'折扣':item.find('.price_s',).text(),
'電子書':item.find('.price_e').text().replace('電子書:','').replace('¥','')
}
saving_book(book)
08
保存數(shù)據(jù)
接下來(lái),我們將書本信息保存為csv格式,實(shí)現(xiàn)代碼如下: with open('data.csv','a',newline='',)as csvfile:
writer=csv.writer(csvfile)
writer.writerow(['排名','書名','圖片','評(píng)論數(shù)','推薦','作者','原價(jià)','折扣','電子書'])
def saving_book(book):
with open('data.csv', 'a', newline='')as csfile:
writer = csv.writer(csfile)
writer.writerow([book.get('排名'), book.get('書名'), book.get('圖片'), book.get('評(píng)論數(shù)'), book.get('推薦'), book.get('作者'),book.get('原價(jià)'),book.get('折扣'),book.get('電子書')])09
遍歷每頁(yè)
剛才我們所定義的index_page()方法需要接收參數(shù)page,page代表頁(yè)碼,這里我們實(shí)現(xiàn)頁(yè)碼遍歷即可,實(shí)現(xiàn)代碼如下: if __name__ == '__main__':
for page in range(1,3):
index_page(page)這里我們只遍歷2頁(yè),感興趣的可以遍歷多頁(yè)。 10
結(jié)果展示
好了,關(guān)于Python爬蟲——Selenium爬取當(dāng)當(dāng)暢銷圖書排行講到這里了,感謝觀看!我們下篇文章再見(jiàn)! ------------------- End -------------------
往期精彩文章推薦:
一篇文章教會(huì)你用Python抓取抖音app熱點(diǎn)數(shù)據(jù)
手把手教你進(jìn)行pip換源,讓你的Python庫(kù)下載嗖嗖的
手把手教你用免費(fèi)代理ip爬數(shù)據(jù)

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說(shuō)一兩句吧~
評(píng)論
圖片
表情








