从 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_alltext 作为参数来仅检索文本:

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方法

爬虫(BeautifulSoup--select--class的选择)

python爬虫时,bs4无法读取网页标签中的文本?

检索“主”对象列表时,Backand 无法检索“从”对象

无法从 IP 服务器检索 JSONArray 但我可以从普通服务器检索?

从 url 检索 jpg 图像返回 nil。但是,从 url 检索 png 图像工作正常