我正在尝试使用BS刮取以下网页:https://www.racingpost.com
。
例如,我想提取所有课程名称。课程名称在此标记下:
<span class="rh-cardsMatrix__courseName">Wincanton</span>
我的代码在这里:
from bs4 import BeautifulSoup
import requests
import pandas as pd
url = "https://www.racingpost.com"
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data, "html.parser")
pages = soup.find_all('span',{'class':'rh-cardsMatrix__courseName'})
for page in pages:
print(page.text)
我没有得到任何输出。我认为它在解析方面有一些问题,我已经尝试了所有可用的BS解析器。有人能给我建议吗?甚至可以用BS吗
感谢mattbasta的回答,它引导我回答了这个问题,解决了我的问题: soup=BeautifulSoup(数据,“html.parser”) pages=soup.find_all('span',{'class':'rh-cardsMatrix___courseName'})
PyQt4 to PyQt5 -> mainFrame() deprecated, need fix to load web pages
查看
https://www.racingpost.com
的源代码时,没有任何元素具有类名rh-cardsMatrix__courseName
。在页面上查询它表明在呈现页面时它确实存在。这表明具有该类名的元素是用JavaScript生成的,而BeautifulSoup不支持JavaScript(它不运行JavaScript)相反,您希望在网页上找到返回创建这些元素的数据的端点(例如,查找数据的XHR),并使用这些端点获取所需的数据
您正在查找的数据似乎隐藏在原始HTML末尾的脚本块中
您可以尝试以下方法:
输出:
注意:请注意,您必须手动搜索字符串,以便在末尾正确分割
res
编辑:更强大的解决方案。
要获取脚本块的总数并从中进行解析,请尝试以下代码:
输出:
然后检索保存到
cardsMatrix
键的数据:再次输出上述内容(但采用更稳健的解决方案):
相关问题 更多 >
编程相关推荐