![](/img/trans.png)
[英]Extract main text from any webpage using BeautifulSoup and Python
[英]Dynamically extract text from webpage using Python BeautifulSoup
我正在尝试从许多玩家的网页中提取玩家 position(这是Malcolm Brogdon的示例)。 我可以使用以下代码提取 Malcolm Brogdon 的 position:
player_id = 'malcolm-brogdon-1'
# Import libraries
from urllib.request import Request, urlopen
from bs4 import BeautifulSoup as soup
import pandas as pd
import numpy as np
url = "https://www.sports-reference.com/cbb/players/{}.html".format(player_id)
req = Request(url , headers={'User-Agent': 'Mozilla/5.0'})
webpage = urlopen(req).read()
page_soup = soup(webpage, "html.parser")
pos = page_soup.p.find("strong").next_sibling.strip()
pos
但是,我希望能够以更动态的方式执行此操作(即找到“位置:”,然后找到后面的内容)。 还有其他玩家的网页结构略有不同,我当前的代码不会返回 position (即Cat Barber )。
我尝试过类似page_soup.find("strong", text="Position:")
的操作,但这似乎不起作用。
您可以 select 包含文本“Position:”的元素,然后是下一个文本兄弟:
import requests
from bs4 import BeautifulSoup
url = "https://www.sports-reference.com/cbb/players/anthony-cat-barber-1.html"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
pos = soup.select_one('strong:contains("Position")').find_next_sibling(text=True).strip()
print(pos)
印刷:
Guard
编辑:另一个版本:
import requests
from bs4 import BeautifulSoup
url = "https://www.sports-reference.com/cbb/players/anthony-cat-barber-1.html"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
pos = (
soup.find("strong", text=lambda t: "Position" in t)
.find_next_sibling(text=True)
.strip()
)
print(pos)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.