簡體   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