xuxinliang 发表于 2021-7-15 16:13

求助:如何利用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 16:13

本帖最后由 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就可以了。

287166966 发表于 2021-7-15 16:26

欣赏够给力。。。。好想拿下

kami2403 发表于 2021-7-15 18:10

这个不需要用到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)

小飞虫 发表于 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 复制链接到浏览器打开
页: [1]
查看完整版本: 求助:如何利用python 及selenium 根据剪贴板的多个网址,批量下载网页内嵌的pdf文件