Python批量爬虫下载PDF文件代码实现

本文的背景是:大学关系很好的老师问我能不能把Excel中1000个超链接网址对应的pdf文档下载下来

虽然可以手动一个一个点击下载,但是这样太费人力和时间了。我想起了之前的爬虫经验,给老师分析了一下可行性,就动手实践了。
没想到刚开始就遇到了困难,Excel中的超链接读到Python中直接显示成了中文。
所以第一步就是把超链接对应的网址梳理出来,再用Python去爬取对应网址的pdf。
第一步已经在上一篇文章中进行了详细说明,本文分享批量爬虫下载文件的第二步,详细代码介绍。
本文目录
  1. 读取数据

  2. 模拟登录网址点击下载pdf的按钮

  3. 写循环批量下载所有文件


一、读取数据

首先读取数据,代码如下:

import os import numpy as np import pandas as pd 
#设置文件存放的地址os.chdir(r'F:\老师\下载文件')#读取数据link_date = pd.read_csv('import.csv',encoding='gbk')link_date.head(2)
得到结果:


二、模拟登录网址点击下载pdf的按钮

接着模拟使用Chrome浏览器登录,用代码打开第一个网址,并模拟人进行点击下载,具体代码如下:

import jsonimport timeimport randomfrom captcha import * from datetime import datetimefrom selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import waitfrom selenium.webdriver.common.keys import Keysfrom selenium.common.exceptions import NoSuchElementExceptionfrom selenium.webdriver.common.action_chains import ActionChainsfrom selenium.webdriver.support import expected_conditions as EC#导入库
print('程序开始时间:', datetime.now().strftime("%Y-%m-%d %H:%M:%S"))#模拟使用Chrome浏览器登陆options = webdriver.ChromeOptions()options.add_argument("--disable-blink-features=AutomationControlled") driver = webdriver.Chrome(options=options)driver.implicitly_wait(10)#打开搜索页driver.get(link_date['网址'][0])time.sleep(20) # 暂停20s#点击下载pdf的按钮driver.find_element_by_xpath('//*[@id="mdiv"]/div[3]/div[2]/a').click()
打开的网址如下图,左击最右边红框中的三个点,左击【更多工具】,将鼠标移至【开发者工具】并左击,即可看到下图右边展示栏。
接着左击红框中的箭头,将鼠标移至最左边红框中的pdf上并左击,可看到右边红框中href对应的模块。
右击该模块,左击【Copy】,再左击【Copy Xpath】即可得到driver.find_element_by_xpath中的路径。


三、写循环批量下载所有文件

写循环批量下载所有文件,最简单的方式是遍历所有网址,模拟点击下载pdf,代码如下:

for i in range(0,1000):    print(i)    #打开搜索页    driver.get(link_date['超链接'][i])    time.sleep(20)  # 暂停20s    driver.find_element_by_xpath('//*[@id="mdiv"]/div[3]/div[2]/a').click()

但是这个代码有一个问题,一旦有一个网址出现意外,容易代码中断,会得到如下报错:

这时需要人为看已经下载到哪一个文件了,然后调整range中的数值接着下载。
如果不想盯着代码,可以写成try的模式,在lab中记录已经下载的标签。如果碰到意外,直接跳到下一个网址,全量下载完后,再梳理哪个网址没有下载,具体语句如下:
lab = []for i in range(1, 1000):    try:        print(i)        #打开搜索页        driver.get(link_date['网址'][i])        time.sleep(20)  # 暂停20s        driver.find_element_by_xpath('//*[@id="mdiv"]/div[3]/div[2]/a').click()        lab.append(i)    except:        pass
最终得到下载结果如下:

至此,Python批量爬虫下载PDF文件代码实现已经讲解完毕,感兴趣的同学可以自己实现一遍

往期回顾:
白羊座
520表白代码合集
黑客帝国中的代码雨
逻辑回归项目实战-附Python实现代码
【Python】【爬虫】Requests库详解
Python绘制米老鼠,为余生请多指教打call

【Python】【爬虫】最近想买电脑,用Python爬取京东评论做个参考

扫一扫关注我

19967879837

联系微信号、手机号

请使用浏览器的分享功能分享到微信等