Python爬虫 | Selenium爬取当当畅销图书排行

Karen110
• 阅读 2015

01

前言

上篇文章我们爬取了今日头条街拍美图,心情相当愉悦,今天这篇文章我们使用Selenium来爬取当当网的畅销图书排行。正所谓书中自有黄金屋,书中自有颜如玉,我们通过读书学习来提高自身的才华,自然能有荣华富贵,也自然少不了漂亮小姐姐。

02

准备工作

在爬取数据前,我们需要安装Selenium库以及Chrome浏览器,并配置好ChromeDriver。

03

Selenium

Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获得浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动态渲染的页面来说,这种爬取方式非常有效。

Selenium库的安装比较简单一行代码就行:

 pip install selenium

也可以到PyPI下载对应的wheel文件,然后进入到wheel文件目录,使用pip安装:

 pip install .........whl

安装验证,进入Python命令行交互模式,如下图:

Python爬虫 | Selenium爬取当当畅销图书排行

这样Selenium就安装完毕了。

04

ChromeDriver安装

首先我们先查看Chrome的版本:点击Chrome菜单“帮助”--->“关于Google Chrome”,即可查看Chrome的版本号,如下图:

Python爬虫 | Selenium爬取当当畅销图书排行

打开ChromeDriver的官方网站,根据自身Chrome浏览器版本下载ChromeDriver并安装:

Python爬虫 | Selenium爬取当当畅销图书排行

注意:ChromeDriver和Chrome浏览器一定要对应,否则可能无法正常工作。

ChromeDriver的环境变量配置,直接将chromedriver.exe文件拖到Python的Scripts目录下。

Python爬虫 | Selenium爬取当当畅销图书排行

到这来,准备工作就完成了,下面我们正式开始抓取当当网的畅销图书排行。

05

实战演练

首先,我们进入当当网的畅销图书网页,我们要利用Selenium抓取图书信息并用pyquery解析得到图书的排名、图片、名称、价格、评论等信息。如下图:

Python爬虫 | Selenium爬取当当畅销图书排行

进入开发者工具中的Network,查看Request URL,如下图所示:

Python爬虫 | Selenium爬取当当畅销图书排行

在页面下方,有个分页导航,我们点击下一页,观察Request URL的变化:

 http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-1        #第1页  
 http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-2        #第2页  
 http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-23        #第23页  
 http://bang.dangdang.com/books/bestsellers/01.00.00.00.00.00-24hours-0-0-1-page      #第n页

我们发现该URL只有最后面的那个数字发生变化,所以我们构造的URL就非常简单了,那个page就是翻页的关键字。

06

首页爬取

首先我们先声明chrome浏览器对应,webdriver支持主流的浏览器,比如说:谷歌浏览器、火狐浏览器、IE浏览器等等。通过WebDriverWait()方法,指定最长等待时间,当规定时间内没加载出来就抛出异常。通过page参数来进行翻页。

代码如下:

 browser=webdriver.Chrome()
 wait=WebDriverWait(browser,10)
 def index_page(page):
     print('正在爬取第',page,'页')
     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

解析商品列表

接下来,我们就可以实现get_booklist()方法来解析商品列表了,这里我们直接调用page_source获取页面源代码,然后用pyquery进行解析,实现代码如下:

 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'),
             '评论数':item.find('.star a').text(),
             '推荐':item.find('.tuijian').text(),
             '作者':item.find('.publisher_info a').text(),
             '日期':item.find('.publisher_info span').text(),
             '原价':item.find('.price_r').text().replace('¥',''),
             '折扣':item.find('.price_s',).text(),
             '电子书':item.find('.price_e').text().replace('电子书:','').replace('¥','')
         }
         saving_book(book)

08

保存数据

接下来,我们将书本信息保存为csv格式,实现代码如下:

 with open('data.csv','a',newline='',)as csvfile:
     writer=csv.writer(csvfile)
     writer.writerow(['排名','书名','图片','评论数','推荐','作者','原价','折扣','电子书'])
 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('评论数'), book.get('推荐'), book.get('作者'),book.get('原价'),book.get('折扣'),book.get('电子书')])

09

遍历每页

刚才我们所定义的index_page()方法需要接收参数page,page代表页码,这里我们实现页码遍历即可,实现代码如下:

 if __name__ == '__main__':
     for page in range(1,3):
         index_page(page)

这里我们只遍历2页,感兴趣的可以遍历多页。

10

结果展示

Python爬虫 | Selenium爬取当当畅销图书排行

好了,关于Python爬虫——Selenium爬取当当畅销图书排行讲到这里了,感谢观看!我们下篇文章再见!

---End---

往期精彩文章推荐:

Python爬虫 | Selenium爬取当当畅销图书排行

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/wU3bo7PH86HnsEnikuU6Wg,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Aidan075 Aidan075
3年前
用python爬取4332条粽子数据进行分析,再送15盒粽子给大家
↑点击上方“凹凸数据” 关注星标 文章干货!有福利 ! 端午节快要到了,甜咸粽子之争也快要拉开帷幕。小五准备用Python爬取淘宝上的粽子数据并进行分析,看看有什么发现。(顺便送大家一波福利)爬虫爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览器自动化操作\1\。其实我们还可以利用Ajax接口来构造链接,但是非常
Aimerl0 Aimerl0
3年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这