【问题标题】:Selenium not fully downloading filesSelenium 没有完全下载文件
【发布时间】:2014-09-06 22:28:19
【问题描述】:

我已经用 beautifulsoup、selenium(chrome) 和 python 建立了一个网络爬虫。

这很简单,beautifulsoup 解析一个充满链接的页面,selenium 一次跟随这些链接 1 个。 Selenium 在每个页面上找到一个特定的下载链接并单击它,开始下载。我会使用 beautifulsoup,但如果我不使用点击链接的浏览器,它会将我发送到带有验证码的页面。

无论如何,当 selenium 开始下载文件时,进度会在屏幕底部显示为 chrome。但是,在看似随机的一段时间后,它说文件在完成一半之前仅几秒钟就完全下载了。可能有一个 8 mb 的文件,它只下载 500 kb,然后说它完成了。我不知道为什么它不会完全下载文件,有人知道等待它真正完全下载文件的方法吗?一次可以下载多少个文件有限制吗?因为我要下载很多文件。

我不知道在这里做什么,我希望有人能解释一下。

【问题讨论】:

  • 这里可能不需要硒。可能传递适当的标头(如 User-Agent,伪装成浏览器)会有所帮助。没有代码很难说。

标签: python macos file selenium download


【解决方案1】:

你在这里并不需要selenium

使用requestsBeautifulSoup 就足够了。只需正确设置 User-AgentHostReferer 标头即可:

from bs4 import BeautifulSoup
import requests

URL = 'url here'

def download_file(url, filename, headers):
    r = requests.get(url, stream=True, headers=headers)
    with open(filename, 'wb') as f:
        for chunk in r.iter_content(chunk_size=1024):
            if chunk:
                f.write(chunk)
                f.flush()

# get link and file name
response = requests.get(URL)
soup = BeautifulSoup(response.content)
a = soup.find('td', text='Download:').next_sibling.a
link = a.get('href')
filename = a.text + '.pdf'

# download file
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36',
    'Host': 'filepi.com',  # host could be extracted from the link
    'Referer': URL
}
download_file(link, filename, headers)

【讨论】:

  • 非常感谢!这完美地工作,我现在将它集成到我目前拥有的代码中。实际上我之前没有听说过请求,所以我可能会在接下来的几天里弄清楚它。我很高兴我不必在这个项目中使用 selenium,我想知道为什么它不能完全下载文件。
猜你喜欢
  • 2018-05-28
  • 2016-08-15
  • 2019-06-01
  • 1970-01-01
  • 2018-03-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2020-06-20
相关资源
最近更新 更多