【问题标题】:Downloading Books from website with python使用python从网站下载书籍
【发布时间】:2020-12-31 10:30:24
【问题描述】:

我正在从网站下载书籍,几乎我的代码运行顺利,但是当我尝试在我的电脑上打开 pdf 书籍时。 Adobe Acrobat Reader 生成的错误是不支持的文件类型

这是书籍格式的图像,我确定我的代码需要更正,因为网站上的书籍格式与通常的 PDF 文件不同。

代码:

import requests
from bs4 import BeautifulSoup
url = 'https://global.oup.com/education/support-learning-anywhere/key-resources-online/?region=international&utm_campaign=learninganywhere&utm_source=umbraco&utm_medium=display&utm_content=support_learning_key_resources&utm_team=int#Primary'

response = requests.get(url)
soup     = BeautifulSoup(response.content, 'html.parser')
table_data = soup.find_all('td')

books_url_list = []
for link in table_data:
    books_url = link.find('a')['href']
    books_url_list.append(books_url+'.pdf')
    
book = books_url_list[1]
book_response = requests.get(book)

with open('books.pdf', 'wb') as f:
    f.write(book_response.content)

`

【问题讨论】:

  • 查看this 答案,可能会有帮助。
  • 图书链接不提供 pdf 的位置。该链接指向另一个网页,该网页随后通过网页显示存储在服务器上的 pdf,因此book_response 的值是该书页面的原始 html,而不是该书的 pdf 内容。
  • 如果您检查网站,您会发现没有可以抓取的 PDF。它们显示为 svgz 文件。查看示例here。您可以尝试使用 svglib 转换它们。
  • 用记事本打开pdf文件,会看到access denied

标签: python file pdf download python-requests


【解决方案1】:

好吧,我检查了网站上的元素,然后我没有找到“.pdf”文件。我们可以使用以下链接检查一本书的页面:https://en.calameo.com/read/000777721d10096b9e9ca?authid=gWc48kAQQoD0&region=international

检查元素后,我发现不是 pdf。它只是页面中的一个图像。

https://p.calameoassets.com/200406174654-2bfa9441783e162c8da42a712feda3e2/p1.svgz

https://p.calameoassets.com/200406174654-2bfa9441783e162c8da42a712feda3e2/p2.svgz

....

https://p.calameoassets.com/200406174654-2bfa9441783e162c8da42a712feda3e2/p98.svgz

等等。

因此,您可以编写代码来下载此图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    相关资源
    最近更新 更多