用美丽的汤提取Web数据

时间:2018-11-13 04:33:30

标签: python-3.x web-scraping beautifulsoup

我在使用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循环中,但这也不起作用。

任何帮助的指针或参考将不胜感激

2 个答案:

答案 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)
.....