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

不温卜火 等级 735 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,如有侵权,请联系删除。

收藏
评论区

相关推荐

爬虫入门经典(十四) | 使用selenium尝试爬取豆瓣图书
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
Python 爬取留言板留言(一):单进程版+selenium模拟
@toc 一、项目概述 1.项目说明本项目主要是对领导留言板内的所有留言的具体内容进行抓取,对留言详情、回复详情和评价详情进行提取保存,并用于之后的数据分析和进一步处理,可以对政府的决策和电子政务的实施提供依据。网站链接是,任意选择一条留言点击进入详情页后,如下对于图中标出的数据,均要进行爬取,以此构成一条留言的组成部分。 2.环境配置(1)P
Python 爬取留言板留言(二):多线程版+selenium模拟
一、项目概述本项目主要是对领导留言板内的所有留言的具体内容进行抓取,对留言详情、回复详情和评价详情进行提取保存,并用于之后的数据分析和进一步处理,可以对政府的决策和电子政务的实施提供依据。具体项目说明和环境配置可参考本系列的第一篇。本篇在第一篇的基础上做了一些改进1. 采用了多线程,设定同时运行的线程的数量为3,线程数量适中,这样在保证在同一时刻有多个线
用python爬取4332条粽子数据进行分析,再送15盒粽子给大家
↑ 点击上方 “凹凸数据” 关注 + 星标  文章干货!有福利 !  端午节快要到了,甜咸粽子之争也快要拉开帷幕。 小五准备用Python爬取淘宝上的粽子数据并进行分析,看看有什么发现。(顺便送大家一波福利)爬虫爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览器自动化操作\[1\]。其实我们还可以利用Ajax接口来构造链接,但是非常
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
Python 使用selenium抓取网页文本和下载音频
Python 使用selenium抓取网页文本和下载音频 #!\usr\bin\env python # -*- coding: utf-8 -*- '一个自动从https://podcast.duolingo.com/spanish中下载音频并且爬取文本的程序' '需要配置下载以下所需库,并且配置好webdriv
Python 自动化发送钉钉消息
在进行Python截取网络报表并发送钉钉群过程中,碰到一些问题,也用到一些工具,在这里做一下简单总结。整个过程归纳如图: ![](https://img2018.cnblogs.com/blog/840488/201906/840488-20190625123504622-1532994586.png) 1 版本配置 ====== windows 10
Python+Selenium之HTMLTestRunner
**下载 HTMLTestRunner 模块** 下载地址:http://tungwaiyip.info/software/HTMLTestRunner.html 保存路径:将下载的HTMLTestRunner.py文件复制到Python安装路径下的Lib目录 验证:在Python交互模式下引入HTMLTestRunner模块,如系统没有报错,则说明添
Python+Selenium自动化
Python+Selenium自动化-安装模块和浏览器驱动操作方法 ================================= * * * 1.安装模块文件 -------- pip install selenium 2.安装浏览器驱动 --------- * 我们主要用的浏览器驱动有**chrome浏览器**、**f
Selenium+Python对开源中国官网进行模拟登录
**1.摘要:** > Selenium是一个开源的和便携式的自动化软件测试工具,用于测试Web应用程序有能力在不同的浏览器和操作系统运行。Selenium不是一个单一的工具,而是一套工具,帮助测试者更有效地基于Web的应用程序的自动化。 > > 我们这里用到的 > > python:python3.6 > > 操作系统:archlinux > >
Selenium+python
跟着悠悠学# coding:utf-8from selenium import webdriverdriver = webdriver.Firefox()driver.get("https://www.baidu.com")# <input id="kw" class="s_ipt" type="text" autocomplete="off" ma
Selenium使用代理出现弹窗验证如何处理
部分商业网站对爬虫程序限制较多,在数据采集的过程中对爬虫请求进行了多种验证,导致爬虫程序需要深入分析目标网站的反爬策略,定期更新和维护爬虫程序,增加了研发的时间和投入成本。这种情况下,使用无头浏览器例如Selenium,模拟用户的请求进行数据采集是更加方便快捷的方式。同时为了避免目标网站出现IP限制,配合爬虫代理,实现每次请求自动切换IP,能够保证长期稳定
Selenium使用及原理
#### 1、Selenium介绍 Selenium是一个Web测试工具,通过直接控制浏览器来实现Web测试,与真实用户操作完全一致。Selenium目前支持IE、Firefox、Chrome、Safari、Opera等浏览器,Selenium支持主流的操作系统平台-Windows、Linux、Mac等,Selenium支持Java、Ruby、Python