Извлечение веб-данных с красивым супом - PullRequest
0 голосов
/ 13 ноября 2018

У меня проблема с получением текста поля с веб-страницы, используя 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 голосов
/ 13 ноября 2018

вам нужно выполнить цикл только один раз, используйте .text, чтобы получить текст внутри элемента

....
soup = BeautifulSoup(content, "html.parser")
data = soup.findAll('a', class_='name_link' )
names=[]
for player in data:
     names.append(player.text)
.....
0 голосов
/ 13 ноября 2018

То, что вы получаете от 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...