吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1814|回复: 6
收起左侧

[求助] 求助:如何利用python 及selenium 根据剪贴板的多个网址,批量下载网页内嵌的pdf文件

[复制链接]
xuxinliang 发表于 2021-7-15 16:13
120吾爱币


求助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

最佳答案

查看完整内容

[mw_shl_code=python,true]#!/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. ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lgsp_Jim 发表于 2021-7-15 16:13
本帖最后由 lgsp_Jim 于 2021-7-15 21:16 编辑

图片.png
[Python] 纯文本查看 复制代码
#!/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')[0]

    # [url=https://s3.amazonaws.com/pdf.sumobrain.com/US9039490B2.pdf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIBOKHYOLP4MBMRGQ%2F20210715%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20210715T000000Z&X-Amz-Expires=173822&X-Amz-SignedHeaders=host&X-Amz-Signature=ade0d0aad351dc65cb130810793964e11a6970120fe6bb3258a9728424db6a42#view=FitH]https://s3.amazonaws.com/pdf.sum ... 424db6a42#view=FitH[/url]
    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就可以了。
287166966 发表于 2021-7-15 16:26
kami2403 发表于 2021-7-15 18:10
这个不需要用到selenium吧, 用request加上BeautifulSoup就可以了。 提供个参考(因为网络问题我没调试,有问题你自己改)

[Python] 纯文本查看 复制代码
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)
小飞虫 发表于 2021-7-15 19:02
用正则提取网址行不行,不一定要根据网页结构提取
fanvalen 发表于 2021-7-15 19:13
直接网页源码里就可以找到pdf连接,非要弄模拟网页点击 iframe又不是唯一的 ,有十个
最快的方法就是正则提取源码连接 再requests下载,简直不要太快
nue12138 发表于 2021-7-15 19:54
用易语言花了几分钟写了个
太忙了,没看bug,源码和模块都给你,不能用就看着改吧
https://ws28.cn/f/5wt24f0f0tc 复制链接到浏览器打开
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 01:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表