Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用beautifulsoup在h4中刮取数据?_Python_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 如何使用beautifulsoup在h4中刮取数据?

Python 如何使用beautifulsoup在h4中刮取数据?,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我正试图从这个网站上获取结果数据(),我完全不知道为什么我提出的解决方案不起作用 我试图清除的外部html是Jon Jones。我对网页抓取或HTML没有太多经验,但所有相关信息都包含在h4标记中 我已经成功地从h2标记中提取了数据,但我不明白为什么同样的方法不适用于h4。例如,要从Jon Jones中提取相关数据,以下代码有效 from requests import get from bs4 import BeautifulSoup headers = { 'User-Ag

我正试图从这个网站上获取结果数据(),我完全不知道为什么我提出的解决方案不起作用

我试图清除的外部html是
Jon Jones
。我对网页抓取或HTML没有太多经验,但所有相关信息都包含在
h4
标记中

我已经成功地从
h2
标记中提取了数据,但我不明白为什么同样的方法不适用于
h4
。例如,要从
Jon Jones
中提取相关数据,以下代码有效

from requests import get
from bs4 import BeautifulSoup

headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36',
    }
raw_html = get('https://www.ufc.com/matchup/908/7717/post', headers=headers)
html = BeautifulSoup(raw_html.content)

# this works
html.find_all('h2', attrs={'class': 'field--name-name name_given red'})[0].get_text().strip()

# this does not work?
html.find_all('h4', attrs={'class': 'e-t5 winner red'})

# this code gets me to the headers but not the actual listed data inside
html.find('div', attrs={'class': 'l-flex--4col-2to4'})

我最困惑的是,为什么上面的内容不起作用,为什么我在浏览器中检查元素时看到的文本没有出现在已删除的HTML中。

它是动态添加的。您可以在“网络”选项卡中找到源。假设总有一个赢家,你可以使用

import requests

r = requests.get('https://dvk92099qvr17.cloudfront.net/V1/908/Fnt.json').json()
winner = [fighter['FullName'] for fighter in r['FMLiveFeed']['Fights'][0]['Fighters'] if fighter['Outcome'] == 'Win'][0]
print(winner)

这非常有帮助!您是如何生成json的?我转到浏览器中的“网络”选项卡,但找不到对您发布的返回数据的任何引用。很明显,我没有很多在web上编程的经验,你是怎么这么容易找到json的?谢谢我打开了开发工具F12中的网络选项卡>按F5刷新页面>按Ctrl+F打开搜索框,搜索各种术语,包括“获胜者”、“赢家”。看到有一些json响应碰巧复制到了一个?然后再次搜索“Winner”和“Win”,找到记录结果的路径,然后返回搜索框并用“”搜索“Win”,这非常有用。如果结果是这样动态生成的,那么就不可能用编程的方式刮取漂亮的汤了吗?我是否需要使用selenium之类的工具来刮取这些数据?这可能会更容易,但它看起来像908是一个id,所以您可能只需要{id}/Fnt.json,对于将来的刮取,只需添加id。如果您提供另一个战斗,我可以帮您查看。