希望这一个很容易。我正在尝试做一些webscraping,我从页面下载所有的pdf文件。目前我正在从体育页面上抓取文件进行练习。我使用Automatetheboringstuff +来自其他用户的帖子(retrieve links from web page using python and BeautifulSoup)来提供此代码。
import requests
import time
from bs4 import BeautifulSoup, SoupStrainer
r = requests.get('http://secsports.go.com/media/baseball')
soup = BeautifulSoup(r.content)
for link in BeautifulSoup(r.text, parseOnlyThese=SoupStrainer('a')):
if link.has_attr('href'):
if 'pdf' in str(link):
image_file = open(os.path.join('E:\\thisiswhereiwantmypdfstogo', os.path.basename(link['href'])), 'wb')
for chunk in r.iter_content(100000):
image_file.write(chunk)
image_file.close()
输出到我指定的目录的文件都很棒,但所有文件大小都相同,当我打开AdobePro查看它们时,我收到一条错误消息:
“Adobe Acrobat无法打开”FILENAMEHERE“,因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送的,并且未正确解码)。”
一点点暗示我在编写过程中遇到问题的原因是在运行image_file.write(chunk)后,它为每个文件输出相同的数字。
这是pdfs在文件夹中的样子:
我想我只需要在编写过程中在某处添加一个参数,以使其正常工作,但我不知道它会是什么。我做了一些谷歌搜索答案,并在这里搜索了一些,但找不到答案。
谢谢!
答案 0 :(得分:0)
嗯。在做了一些更多的研究后,似乎我发现了问题。我不明白为什么这样有效,但我会捅它。我修改了我的代码,使每个链接([' href'])成为响应对象。然后我把它写到我的目录,它工作。