使用bs4 pyhton3进行网页抓取。找不到元素

时间:2020-06-10 00:22:41

标签: python beautifulsoup

我目前正在python3中试用BeautifulSoup(bs4)。

当我去打印汤或酱时,我要的元素就不存在了。

我在酱汁/汤中找不到该表的代码(请参阅表网站的屏幕截图)。

screenshot of table from website

这是我的代码:

import bs4 as bs
import requests

r = requests.get("https://www.flashscore.com/field-hockey/netherlands/hoofdklasse/standings/")

soup = bs.BeautifulSoup(r.text,'lxml')

print(soup) # or i print r.text -> the sauce

任何帮助将不胜感激。请您尽可能解释任何建议。

1 个答案:

答案 0 :(得分:1)

一个非常常见的问题:页面使用JavaScript添加项目,但是BSrequests无法运行JavaScript

您可以使用Selenium来控制真正的Web浏览器,该浏览器可以运行JavaScript并使用Selenium函数搜索数据或从Selenium中获取HTML(driver.page_source)并使用BS

或者您可以在DevTools / Firefox中使用Chrome(标签:Network,过滤器:XHR)查找{{1} }从服务器获取数据,然后可以将此网址与JavaScript一起使用。


我使用requests找到了url并通过表获取HTML。

它需要标头DevTools来获取数据,而不是带有消息'X-Fsign'的HTML

我不知道此标头是否始终具有相同的值。如果不是这样,则需要更多的研究才能在HTML或Cookies中找到此值。

401 Unauthorized

结果:

import requests
import bs4 as bs

url = 'https://d.flashscore.com/x/feed/ss_1_INmPqO86_GOMWObX1_table_overall'

headers = {
#    'User-Agent': 'Mozilla/5.0'
#    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:79.0) Gecko/20100101 Firefox/79.0',
#    'X-Referer': 'https://www.flashscore.com/field-hockey/netherlands/hoofdklasse/standings/',
    'X-Fsign': 'SW9D1eZo',
#    'X-Requested-With': 'XMLHttpRequest',
#    'Referer': 'https://d.flashscore.com/x/feed/proxy-local',
}

r = requests.get(url, headers=headers)

soup = bs.BeautifulSoup(r.text, 'lxml')

for item in soup.find_all('span', class_='team_name_span'):
    print(item.text)