Python从网站上搜集PDF文件为什么它们都是腐败和相同的大小?

时间:2017-05-03 09:06:56

标签: python pdf web-scraping python-requests

希望这一个很容易。我正在尝试做一些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在文件夹中的样子:

the_corrupted_pdfs

我想我只需要在编写过程中在某处添加一个参数,以使其正常工作,但我不知道它会是什么。我做了一些谷歌搜索答案,并在这里搜索了一些,但找不到答案。

谢谢!

1 个答案:

答案 0 :(得分:0)

嗯。在做了一些更多的研究后,似乎我发现了问题。我不明白为什么这样有效,但我会捅它。我修改了我的代码,使每个链接([' href'])成为响应对象。然后我把它写到我的目录,它工作。