我在使用python 3和bs4从网页获取字段文本时遇到问题。下面的代码。
import requests
from bs4 import BeautifulSoup
import pandas as pd
page = requests.get("https://www.mlssoccer.com/players")
content = page.content
soup = BeautifulSoup(content, "html.parser")
data = soup.find('div', class_ = 'item-list' )
names=[]
for player in data:
name = data.find_all('div', class_ = 'name')
names.append(name)
df= pd.DataFrame({'player':names})
代码可以工作(即执行),但是我在输出中得到了html标签,而不是字段文本(玩家名称)。我尝试过:
name = data.find_all('div', class_ = 'name').text
在for循环中,但这也不起作用。
任何帮助的指针或参考将不胜感激
答案 0 :(得分:0)
从find_all
获得的是ResultSet
,所以是的,您需要使用text
来检索所需的名称数据,但不适用于一组名称数据。因此,您需要使用for循环来一次检索它们。
但是,div
中的文本实际上包含一个a
标记,因此您需要通过find('a')
对其进行进一步挖掘。
for player in data:
name = data.find_all('div', class_ = 'name')
for obj in name:
names.append(obj.find('a').text)
答案 1 :(得分:0)
您只需要循环一次,即可使用.text
在元素内获取文本
....
soup = BeautifulSoup(content, "html.parser")
data = soup.findAll('a', class_='name_link' )
names=[]
for player in data:
names.append(player.text)
.....