【发布时间】:2018-12-14 08:43:28
【问题描述】:
我正在尝试制作一个机器人来抓取此页面http://www.skysports.com/transfer-centre,当我在 Chrome 中打开它时,我可以在开发者工具中看到我想要的元素
但是当我使用下面的代码时,它返回 None:
import requests
from bs4 import BeautifulSoup
page = requests.get('http://www.skysports.com/transfer-centre').text
soup = BeautifulSoup(page, 'lxml')
print(soup.find('time'))
我错过了什么吗?
【问题讨论】:
-
也许这个元素是通过javascript动态创建的。
-
如果您打印出
page或soup并查看它,或者查看源代码而不是查看浏览器中的动态页面,那么<time>标记在那里吗?如果没有,那么它不在页面上(它是由 JS 创建的,正如 Gabriel 所说),所以你在页面上找不到它。 -
如果这是问题所在,那么几乎可以肯定有一个很好的重复问题——但简短的版本是您将不得不运行 JS 解释器(例如,PhantomJS)或驱动 Web 浏览器(例如,参见 Selenium),或者阅读 JS 代码并弄清楚它在做什么,这样您就可以在 Python 中做同样的事情,或者跟踪 JS 代码发出的 AJAX 请求,以便您可以在 Python 中发出这些请求。 (最后一个可能不会以与动态网页相同的格式为您提供数据,因此您还需要弄清楚格式是什么,但它可能仍然更容易。)
-
如果你打算使用无头浏览器,不要使用 phantomjs,它已被弃用。看看this one instead。
-
感谢大家为我指出正确的方向,我最终发现了 @Gabriel 建议的 selenium 和 chrome 驱动程序。
标签: python beautifulsoup