从 BeautifulSoup.select 检索整个列表作为文本
Posted
技术标签:
【中文标题】从 BeautifulSoup.select 检索整个列表作为文本【英文标题】:Retrieving entire list as text from BeautifulSoup.select 【发布时间】:2017-12-06 22:37:33 【问题描述】:我正在尝试为我正在进行的项目解析 MLB 数据。我是编码新手并尝试使用漂亮的汤。我写的代码如下。我的问题是,在使用.select
之后,我返回了多个列表格式的 html 元素,但我真正需要的是列表格式的这些元素中的实际数字。我尝试过使用各种方法来检索文本,但我不断收到错误消息,指出无法将列表作为文本返回。如果我使用
ABSoup[1].getText
,我可以检索一个值,但我不知道如何一次检索它们。我也尝试使用一个函数进行多次迭代,但我也得到了一个错误。对新开发人员的任何建议或帮助将不胜感激!
import requests
import bs4
data = requests.get('http://www.baseball-reference.com/players/gl.fcgi? id=harpebr03&t=b&year=2017')
MLBsoup = bs4.BeautifulSoup(data.text, 'html.parser')
ABSoup = MLBsoup.select('td[data-stat="AB"]')
print (ABSoup)
#[<td class="right " data-stat="AB">3</td>, <td class="right " data-stat="AB">4</td>, <td class="right " data-stat="AB">3</td>, <td class="right " data-stat="AB">4</td>, <td class="right " data-stat="AB">4</td>, <td class="right " data-stat="AB">4</td>, <td class="right " data-stat="AB">4</td>, <td class="right " data-stat="AB">2</td>, <td class="right " data-stat="AB">4</td>.....
【问题讨论】:
【参考方案1】:这是一个小示例,如何使用find_all
和text
作为参数来仅检索文本:
from bs4 import BeautifulSoup
soup = (BeautifulSoup('<td class="right " data-stat="AB">3</td><td class="right " data-stat="AB">2</td>'))
print (soup.find_all(text=True))
>>> ['3', '2']
编辑:
您可以从选择中迭代列表并使用 BeautifulSoup 对其进行解析。
text_results = []
for item in ABSoup;
text_results.append(BeautifulSoup(item).find(text=True))
【讨论】:
我不确定这会起作用,因为棘手的部分是 .select 部分返回一个列表,因此输出开头的 [ 括号(末尾也有一个)。事实上,这是一个让我无法通过 Beautiful Soup 将其传回的列表。 感谢您的帮助。我能够使用以下方法将列表转换为字符串: ABSoup = MLBsoup.select('td[data-stat="AB"]') AbSoup = bs4.BeautifulSoup(("".join(str(x) for x in ABSoup)), 'html.parser') 打印 (AbSoup.find_all(text=True))以上是关于从 BeautifulSoup.select 检索整个列表作为文本的主要内容,如果未能解决你的问题,请参考以下文章
爬虫(BeautifulSoup--select--class的选择)