【问题标题】:Downloading pdfs with python?用python下载pdf?
【发布时间】:2015-04-27 15:31:01
【问题描述】:

我正在编写一个脚本,它使用正则表达式在页面上查找 pdf 链接,然后下载所述链接。该脚本在我的个人目录中运行并正确命名文件,但它没有下载完整的 pdf 文件。 pdf 正在被拉取,只有 19kb,一个损坏的 pdf,当它们应该是大约 15mb 时

import urllib, urllib2, re

url = 'http://www.website.com/Products'
destination = 'C:/Users/working/'
website = urllib2.urlopen(url)
html = website.read()
links = re.findall('.PDF">.*_geo.PDF', html)

for item in links:
    DL = item[6:]
    DL_PATH = url + '/' + DL
    SV_PATH = destination + DL
    urllib.urlretrieve(DL_PATH, SV_PATH)

url 变量链接到包含所有 pdf 链接的页面。当您单击 pdf 链接时,它会将您带到“www.website.com/Products/NorthCarolina.pdf”,它会在浏览器中显示 pdf。我不确定是否因此我应该使用不同的 python 方法或模块

【问题讨论】:

  • 您是否查看了您正在下载的文件以查看它们是否真的是 pdf 文件,或者它们是否是有消息的网页(例如尝试重定向或其他一些 HTTP 状态) ?
  • 那 19K 里有什么?它可以是嵌入了链接的下载页面。
  • 那 19k,下载的是损坏的 PDF 文件

标签: python pdf download


【解决方案1】:

你可以试试这样的:

import requests


links = ['link.pdf']
for link in links:
    book_name = link.split('/')[-1]
    with open(book_name, 'wb') as book:
        a = requests.get(link, stream=True)

        for block in a.iter_content(512):
            if not block:
                break

            book.write(block)

【讨论】:

  • 谢谢!我犯了一个愚蠢的错误。我上面的代码现在和你的一样有效。带有 pdf 链接的网页的路径与 pdf 的路径不同。他们略有不同。请求模块中的错误报告帮助我意识到这一点!
【解决方案2】:

您还可以使用 HTML 知识(用于解析)和 BeautifulSoup 库从网页中查找所有 pdf 文件,然后将它们全部下载。

html = urlopen(my_url).read()
html_page = bs(html, features=”lxml”)

解析后可以搜索<a>标签,因为所有超链接都有这些标签。一旦你拥有了所有的<a> 标签,你可以通过检查它们是否以pdf 扩展名结尾来进一步缩小它们。这是一个完整的解释:https://medium.com/the-innovation/notesdownloader-use-web-scraping-to-download-all-pdfs-with-python-511ea9f55e48

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2017-05-02
    • 2020-08-04
    • 2016-02-22
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 2021-03-19
    相关资源
    最近更新 更多