准备工作
首先,我们进入原创力文档官网,随便点击一篇pdf文章,进入如下界面:
然后点击“好的,开始阅读”进入全屏界面。接着,按“F12”进入开发者工具;点击开发者界面左上角的箭头符号,选择第一页,开发者工具界面则会定位相应的HTML标签处;定位的光标处中src中的“//view-cache.book118.com/view10/M00/1A/32/wKh2Dl9Df5SAcs8-AADV0nCN1hY314.png”则是我们后续下载需要的URL地址(在浏览器中搜索上述地址,就会发现第一页以图片的形式呈现在了网页中,这时我们可以右键保存)。
尝试点击其他页面,你会发现他们是有迹可循的,所有的光标都会定位到div<class=“webpreview-item”>这一标签下的img标签,所以这就是我们本次要爬的重点。
-
注意事项:这时,你进入网页源代码,会发现源代码和你在开发者工具界面的源码完全不一样。这是因为该网站设计的反爬虫机制,它提供的源代码并不是你放大阅读的网页,而是你一开始进来的网页。
所以,无法通过该网页的url进行爬取。笔者,思考再三,想到了一个解决办法,复制方法阅读页面的开发者工具界面body标签里的源码复制到txt文件中,再读取txt文件(如果读者有更好的解决办法,欢迎在评论区交流学习!)
-
值得注意的是,一定要把所有页面全部加载出来,不然有些页面就没有src地址
好的,啰嗦了这么多。下面,让我们进入源代码环节。
源代码
from urllib.request import urlretrieve
import time
from lxml import etree
# 从html.txt中读取网页源代码
with open('html.txt', 'r', encoding='utf-8') as file:
results = file.read()
# 下载文件的页数
num = 0
results = etree.HTML(results)
content_list = results.xpath('//div/div[2]/div')
for content in content_list:
img_url = content.xpath('.//img/@src')
# 设个延时
time.sleep(3)
if len(img_url):
img_url = img_url[0].strip()
# pdf文件的src地址都是以//view开头的
if img_url[2:6] == 'view':
num += 1
# 一定要在src地址前加上‘https:’,不然python无法识别会报错
img_url = 'https:' + img_url
img_name = str(num) + '.jpg'
# 根据src地址下载图片,下载目录默认是当前工作路径
urlretrieve(img_url, img_name)
print('打印第', num, '张成功!')
xpath地址不知道的可以参考"右键copy点击xpath"。