抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)

优采云 发布时间: 2022-03-13 00:12

  抓取网页生成电子书(一步步解析单个页面,得到该页书籍链接列表得到)

  2. 解析单个页面以获取该页面上的书籍链接列表

  3. 转到书页

  * 判断是否可以下载

  * 如果可以下载,请下载所有格式的书籍

  其次,为了获得爬虫的健壮性,我们需要保证每次网页加载成功,文件下载完成,我会在后面的内容中一步一步介绍。

  实施过程

  Selenium 可以模拟打开浏览器。在此之前,我们需要下载浏览器的驱动程序。在本文中,我们使用的是chrome浏览器,Firefox也是常用的浏览器。步骤类似,不再赘述。

  硒的安装:

  sudo pip install selenium

  然后下载chrome的webdriver,直接保存到本地,比如/usr/bin,然后设置selenium的基本设置

  import re#正则表达式

import random#随机选择

import subprocess# 执行bash命令

from multiprocessing import Pool#建立线程池,并行爬取加快速度

from selenium import webdriver

# set chromedriver path and download path

chromeOptions = webdriver.ChromeOptions()

dl_path="~/Downloads/KanCloud"#设置下载路径

chromedriver="/usr/bin/chromedriver"#修改为你的chromedriver路径

prefs = {"download.default_directory" : dl_path}

chromeOptions.add_experimental_option("prefs",prefs)

#可以为webdriver设置代理,自动获得代理IP地址下面会解释,这里注释掉

#PROXY='1.82.216.134:80'

#chromeOptions.add_argument('--proxy-server=%s' % PROXY)

# url_start='http://www.kancloud.cn/explore/top'

#建立一个webdriver对象

driver = webdriver.Chrome(chrome_options=chromeOptions)

driver.get('http://www.kancloud.cn/digest/ios-mac-study')#用chrome打开这个网页

  运行上面的代码,打开一个chrome标签,如下图:

  

  点击下载按钮,我们看到有PDF、epub、mobi三个下载选项。为了模拟点击动作,我们需要获取元素的位置。这时候我们就可以使用chrome的inspect功能了,快捷键是 Ctrl+shift+I ,或者将鼠标悬停在下载上,右键选择inspect,效果如下:

  

  选择右边高亮的代码,右键->复制->复制xpath,可以得到元素的xpath

  //*[@id="manualDownload"]/span/b

  然后使用webdriver本身的xpath搜索功能获取元素,并模拟点击操作

  运行上面这句话,我们可以看到网站确实响应了,支持下载的电子书格式有3种。这一步点击下载按钮是必须的,否则直接点击epub会报 element not visible 的错误。接下来我们演示下载epub,鼠标悬停在epub上,右键查看,可以得到下载epub的xpath,同上

  driver.find_element_by_xpath('//*[@id="manualDownload"]/div/div/ul/li[2]/a').click()

  这样我们就可以把这本epub电子书下载到我们指定的路径了。

  这是 Selenium 的基本应用。它还有一些其他定位元素的方法和模拟操作的功能,比如把网页往下拉,因为有些网站会根据用户的下拉情况来渲染网页,越往下拉,显示的内容越多。详情请查看 selenium 的官方文档。

  我们对每一页的每一本书执行上述过程,然后我们可以爬取整个站点的书籍,前提是你的网速够快,运气够好。这是因为在持续爬取过程中会出现一些异常,例如

  1. webdriver 将无法打开网页

  2. 下载完成前打开下一个网页,导致webdriver负担过重,无法加载网页

  3. 网站可能是基于IP地址的反爬虫

  下一篇我们将解决以上问题,使用多进程加速(webdriver太慢,无法打开网页)。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线