<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Python爬蟲 | Selenium爬取當(dāng)當(dāng)暢銷圖書排行

          共 5303字,需瀏覽 11分鐘

           ·

          2021-07-05 16:05

          點(diǎn)擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進(jìn)行關(guān)注

          回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書

          江漢曾為客,相逢每醉還。



          專欄作者:霖hero,在職爬蟲工程師,熟悉JS逆向與分布式爬蟲。喜歡鉆研,熱愛(ài)學(xué)習(xí),樂(lè)于分享。公眾號(hào)后臺(tái)回復(fù)入群,拉你進(jìn)技術(shù)群與大佬們近距離交流。


          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 -------------------

          往期精彩文章推薦:

          歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持

          想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群

          萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行

          /今日留言主題/

          隨便說(shuō)一兩句吧~

          瀏覽 60
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩免费黄片 | 国产黄色a级 | 在线观看免费逼视频 | 无码成人系列 | 欧美特级视频 |