繁体   English   中英

使用 Python BeautifulSoup 从网页中动态提取文本

[英]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:")的操作,但这似乎不起作用。

Malcolm Brogdon 的运动参考网页

您可以 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM