在使用 python 3 中的 requests.get 获取数据之前等待页面加载

新手上路,请多包涵

我有一个页面需要获取与 BS4 一起使用的源代码,但是页面中间需要 1 秒(可能更少)来加载内容,并且 requests.get 在加载该部分之前捕获页面的源代码,如何我可以等一下再获取数据吗?

 r = requests.get(URL + self.search, headers=USER_AGENT, timeout=5 )
    soup = BeautifulSoup(r.content, 'html.parser')
    a = soup.find_all('section', 'wrapper')

这页纸

<section class="wrapper" id="resultado_busca">

原文由 ribas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4.1k
2 个回答

看起来不是等待的问题,看起来元素是由JavaScript创建的, requests 无法处理JavaScript动态生成的元素。一个建议是使用 seleniumPhantomJS 来获取页面源代码,然后你可以使用 BeautifulSoup 下面显示的代码正是你的pars :

 from bs4 import BeautifulSoup
from selenium import webdriver

url = "http://legendas.tv/busca/walking%20dead%20s03e02"
browser = webdriver.PhantomJS()
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(html, 'lxml')
a = soup.find('section', 'wrapper')

此外,如果您只查找一个元素,则无需使用 .findAll

原文由 Vinícius Figueiredo 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了同样的问题,提交的答案都没有真正对我有用。但是经过长时间的研究,我找到了解决方案:

 from requests_html import HTMLSession
s = HTMLSession()
response = s.get(url)
response.html.render()

print(response)
# prints out the content of the fully loaded page
# response can be parsed with for example bs4

requests_html 包 ( docs ) 是一个官方包,由 Python 软件基金会分发。它具有一些额外的 JavaScript 功能,例如能够等待页面的 JS 完成加载。

我希望我能帮助别人!

编辑: 不幸的是,该包目前仅支持 Python 3.6 版,因此它可能不适用于其他版本。

原文由 Enoch 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进