求助:如何利用python 及selenium 根据剪贴板的多个网址,批量下载网页内嵌的pdf文件
求助python达人,利用python来实现内嵌pdf的批量下载。
当然也可以使用别的语言,只要能够达到pdf下载的目的就可以。
pdf的网站示例https://www.freepatentsonline.com/20150091263.pdf
我的浏览器是360chrome,内核版本86.
我当前使用以下的代码,会获取内嵌的google广告链接。
不知道如何能够获取pdf的链接。要讲iframe标签里面才有src,
不知道为什么会获取了google广告链接的。
还希望能够启动的360chrome能够使用我常用账户来启动。
现在启动的是不带用户配置的,不带广告插件。
我在想用了广告插件,是不是就可以不会获取google广告链接了。
但是我又不会启动广告插件,再来下载。
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import tkinter
import tkinter.messagebox
__browser_url = r'D:\Apps\360Chrome\Chrome\Application\360chrome.exe'##360浏览器的地址
chrome_options = Options()
chrome_options.binary_location = __browser_url
driver = webdriver.Chrome(chrome_options=chrome_options)
driver .get('https://www.freepatentsonline.com/20150091263.pdf')
pdf_url = driver .find_element_by_tag_name('iframe').get_attribute("src")
driver .get(pdf_url)
download = driver .find_element_by_xpath('//*[@id="下载"]')
tkinter.messagebox.showinfo('提示',pdf_url)
download.click()
批量的pdf网址链接,我会复制到剪贴板里。
如:
https://www.freepatentsonline.com/20150091263.pdf
https://www.freepatentsonline.com/20170254761.pdf
https://www.freepatentsonline.com/9983147.pdf
https://www.freepatentsonline.com/20210046727.pdf
本帖最后由 lgsp_Jim 于 2021-7-15 21:16 编辑
#!/usr/bin/env python3
# coding=utf-8
# Version:python3.6.1
# Project:pachong
# File:requests_freepatentsonline_com.py
# Data:2021/7/15 19:59
# Author:lgsp_Jim
import os
import requests
from lxml import etree
dir_path = './files/freepatentsonline_com/'
if not os.path.exists(dir_path):
os.makedirs(dir_path)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:63.0) Gecko/20100101 Firefox/63.0',
}
while True:
number = input('(输入Q退出)输入pdf编号:').strip()
if number == 'Q':
break
url = 'https://www.freepatentsonline.com/' + number + '.pdf'
pdf_response = requests.get(url=url, headers=headers)
doc = etree.HTML(pdf_response.text)
download = doc.xpath('//center[@style="border: 2px inset;"]/iframe/@src')
# https://s3.amazonaws.com/pdf.sum ... 424db6a42#view=FitH
download_url = download.replace('#view=FitH', '')
file = requests.get(download_url, headers=headers)
file_path = './files/freepatentsonline_com/' + number + '.pdf'
with open(file_path, 'wb') as f:
f.write(file.content)
print('%s-PDF成功下载' % number)
看着楼上的大佬,张手就把代码写好,真是羡慕嫉妒啊
单线程代码,输入编号一个个下载即可。文件下载有反爬设置,如果批量下载同一文件,楼主需自行加上代{过}{滤}理和动态User-Agent。
楼主如果要批量下载,把所有要下载的编号写在一个txt,然后for循环读取出来赋值给number就可以了。 欣赏够给力。。。。好想拿下 这个不需要用到selenium吧, 用request加上BeautifulSoup就可以了。 提供个参考(因为网络问题我没调试,有问题你自己改)
import requests
import pyperclip
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36', }
clipboardStr = pyperclip.paste()
urls = clipboardStr.splitlines()
for url in urls:
res = requests.get(url, headers=headers)
sp = BeautifulSoup(res.content.decode('utf-8'), 'lxml')
pdfsrc = sp.iframe['src']
pdfcontent = requests.get(pdfsrc, headers=headers)
filename = url.split("/")[-1]
with open(filename, 'wb') as code:
code.write(pdfcontent) 用正则提取网址行不行,不一定要根据网页结构提取 直接网页源码里就可以找到pdf连接,非要弄模拟网页点击 iframe又不是唯一的 ,有十个
最快的方法就是正则提取源码连接 再requests下载,简直不要太快 用易语言花了几分钟写了个
太忙了,没看bug,源码和模块都给你,不能用就看着改吧
https://ws28.cn/f/5wt24f0f0tc 复制链接到浏览器打开
页:
[1]