爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

不温卜火 等级 390 0 0

  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!

目录


爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书


推荐

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

  ♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

一、小小课堂

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
由于只是属于教学性质,学长本人在此以就以爬取Python相关的图书为例!

链接:https://search.douban.com/book/subject_search?search_text=python&cat=1001
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
首先我们需要先找下有没有接口
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
但是通过查看,我们发现是没有接口的。经过分析,这个网站展示的数据,不能通过之前的方式获取,猜想是通过加密解密得到的内容。这个时候有两种方式
a:找到加密解密的接口,使用python模拟(相当复杂,必须有解析js的能力)
b:使用selenium+driver直接获取解析后的页面数据内容(这种相对简单)
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
当然了,我们只是分析了接口这一部分,其实我们通过查看网页源码,使用xpath进行尝试解析,发现其实是可行的,但是由于本篇博文使用的是自动化工具selenium,所以就不过多解释xpath。
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
在这里,我们使用selenium+driver能模拟浏览器找到elements里的内容,这样再提取就没问题了。
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
接下来我们需要了解一些概念

  • 1.什么是selenium?
    selenium是网页自动化测试工具,可以自动化的操作浏览器。如果需要操作哪个浏览器需要安装对应的driver,比如你需要通过selenium操作chrome,那必须安装chromedriver,而且版本与chrome保持一致。

  • 2、driver
    操作浏览器的驱动,分为有界面和无界面的
    有界面:与本地安装好的浏览器一致的driver(用户可以直接观看,交互比如单击、输入)
    无界面:phantomjs(看不到,只能通过代码操作,加载速度比有界面的要快)

了解完之后,安装selenium:

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

下载driver:
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

下载好之后,放入项目中,方便找到。
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

二、selenium+driver初步尝试控制浏览器

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
说到模拟,那我们就先来模拟如何打开豆瓣图书并打开Python相关的图书

from selenium import webdriver
import time
import 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)
# 获取网页内容Elements
content = driver.page_source
# 结束
driver.quit() 

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
🆗,说明我们能够控制浏览器进行操作,那么这样我们就可以进行下一步操作了。
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
我们首先先提取数据

# 获取网页内容Elements
content = driver.page_source

# 提取数据
print(content) 

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
提取到数据后,我们查到里面是否存在我们所要爬取的图书,在此我们以《Python编程 : 从入门到实践》为切入点
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
这个时候,我们首先要查看这个页面内是否存在有iframe
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
通过查找,我们发现在我们要爬取的部分是没有iframe存在的,因此我们可以直接使用xpath进行解析。
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
先查看网页源码,然后尝试解析

    1. 解析整体部分
      爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
    1. 解析书名
      爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
    1. 解析评分
      爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
  • 4.解析其他
    爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
    🆗到这里我们就解析完成了,但是我们如果直接这样写的话,其实是有点问题的,问题是什么呢?我们可以看下结果
    爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
    代码如下:
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) 

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
我们可以看到标红处,有的数据是获取不到的,这难道是我们代码有问题吗?其实我们的代码并没有问题。我们看下网页
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
我们可以很清楚的看到,第一个<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) 

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
这个时候,就是我们需要的内容了。内容的问题解决了,下面就需要考虑自动翻页了。
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
我们通过查看网页的翻页过程,如下:
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
通过观察翻页部分的网页就够,我们可以以后页为关键词选取其中的href自动翻转到下一页。顺便再加上一个判定如果没有就自动停止。

我们下用xpath进行分析
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

代码如下

 # 找到后页
    next = driver.find_element_by_xpath('//a[contains(text(),"后页")]')
    # 判断
    if next.get_attribute("href"):
        # 单击
        next.click()
    else:
        # 跳出循环
        break 

三、完整代码

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

# encoding: utf-8
'''
  @author 李华鑫
  @create 2020-10-09 11:34
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 豆瓣图书.py
  @Version:1.0

'''
from selenium import webdriver
from lxml import etree
import os
import time
import requests
import re
import 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() 

四、运行结果

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

  好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
  如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书

本文转自 https://buwenbuhuo.blog.csdn.net/article/details/109380308,如有侵权,请联系删除。

收藏
评论区

相关推荐

pytest介绍
概述 pytest是一个非常成熟的全功能的Python测试框架,主要特点有以下几点: 简单灵活,容易上手,文档丰富; 支持参数化,可以细粒度地控制要测试的测试用例; 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytestrequests); pytest具有很多第三方插
爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
爬虫入门经典(十五) | 邪恶想法之爬取百度妹子图
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
爬虫入门经典(十七) | 图形验证码识别
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
Python 爬取留言板留言(一):单进程版+selenium模拟
@toc 一、项目概述 1.项目说明本项目主要是对领导留言板内的所有留言的具体内容进行抓取,对留言详情、回复详情和评价详情进行提取保存,并用于之后的数据分析和进一步处理,可以对政府的决策和电子政务的实施提供依据。网站链接是,任意选择一条留言点击进入详情页后,如下对于图中标出的数据,均要进行爬取,以此构成一条留言的组成部分。 2.环境配置(1)P
Python 爬取留言板留言(二):多线程版+selenium模拟
一、项目概述本项目主要是对领导留言板内的所有留言的具体内容进行抓取,对留言详情、回复详情和评价详情进行提取保存,并用于之后的数据分析和进一步处理,可以对政府的决策和电子政务的实施提供依据。具体项目说明和环境配置可参考本系列的第一篇。本篇在第一篇的基础上做了一些改进1. 采用了多线程,设定同时运行的线程的数量为3,线程数量适中,这样在保证在同一时刻有多个线
Python 爬取留言板留言(三):多进程版+selenium模拟
一、项目概述本项目主要是对领导留言板内的所有留言的具体内容进行抓取,对留言详情、回复详情和评价详情进行提取保存,并用于之后的数据分析和进一步处理,可以对政府的决策和电子政务的实施提供依据。具体项目说明和环境配置可参考本系列的第一篇。本篇在第二篇的基础上做了一个主要改进:从多线程改变为多进程,设定同时运行的进程的数量为3,数量适中,这样在保证在同一
Python 不用selenium 带你高效爬取京东商品评论
一、项目说明 1.项目背景一天,一朋友扔给我一个链接,让我看看这个歌商品的所有评论怎么抓取,我打开一看,好家伙,竟然有近300万条评论,不是一个小数目啊。但是仔细一看,原来有234万的评论是默认好评,还是有少部分是有价值的评价的。经过进一步观察,可以看到显然,网页中显示的只有100页数据,每页显示10条,通常可以用selenium点击每一页然后获取
Python爬虫常见异常及解决办法
给大家介绍一门互联网行业认知课,带你一起深入认识互联网这个行业,为将来的就业铺好路。 1.selenium.common.exceptions.WebDriverException: Message: unknown error: cannot find Chrome binary在爬虫时经常会使用selenium实现自动化,来模拟Google访问目
用python爬取4332条粽子数据进行分析,再送15盒粽子给大家
↑ 点击上方 “凹凸数据” 关注 + 星标  文章干货!有福利 !  端午节快要到了,甜咸粽子之争也快要拉开帷幕。 小五准备用Python爬取淘宝上的粽子数据并进行分析,看看有什么发现。(顺便送大家一波福利)爬虫爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览器自动化操作\[1\]。其实我们还可以利用Ajax接口来构造链接,但是非常
使用Python爬取QQ群成员信息
直接贴代码 pythonimport osfrom selenium import webdriverfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expectedconditions as ECfrom seleni
用 Python 爬取 QQ 空间说说和相册
文 | 某某白米饭 来源:Python 技术「ID: pythonall」QQ 空间在 2005 年被腾讯开发,已经经历了 15 个年头,在还没有微信的年代,看网友发表的心情、心事、照片大多都在 QQ 空间的里。它承载了80、90 后的大量青春,下面我们一起用 selenium 模块导出说说和相册回忆青春吧 安装 seleniumselenium 是一
618抢购抢不到?,会了python的这个骚操作,妈妈再也不担心我抢不过别人了!!!
618马上要到了,像淘宝,天猫,京东早就已经准备好了,每到618与双十一这种消费盛典,便会抢购的现象,很多人因为手速不够快,抢不到价格实惠的商品,在这小编给大家带来了一个自动抢购的示例代码,此代码是python通过selenium实现毫秒级的自动抢购。(该文章仅作学习selenium框架的学习示例)直接上源码:!/usr/bin/env python cod
别去送死了。Selenium 与 Puppeteer 能被网站探测的几十个特征
摄影:产品经理味道很好的毛血旺 很多人喜欢使用Selenium 或者 Puppeteer(Pyppeteer)通过模拟浏览器来编写爬虫,自以为这样可以不被网站检测到,想爬什么数据就爬什么数据。 但实际上,Selenium 启动的浏览器,有几十个特征可以被网站通过 JavaScript 探测到。Puppeteer 启动的浏览器,也有很多特征能够被网站探测。
Python爬虫 | Selenium爬取当当畅销图书排行
01 前言 上篇文章我们爬取了,心情相当愉悦,今天这篇文章我们使用Selenium来爬取当当网的畅销图书排行。正所谓书中自有黄金屋,书中自有颜如玉,我们通过读书学习来提高自身的才华,自然能有荣华富贵,也自然少不了漂亮小姐姐。 02 准备工作 在爬取数据前,我们需要安装Selenium库以及Chrome浏览器,并配置好Chro