Как получить конкретный подкласс c с сайта, используя BeautifulSoup? - PullRequest
0 голосов
/ 30 марта 2020

Я хочу получить таблицу по этой ссылке: Рыночные значения футболистов Мне удалось сделать это с помощью этого кода:

def few(urls, file):
f = open(file, 'a', newline='', encoding="utf-8")
writer = csv.writer(f)
url = urls
page = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(page.content, 'lxml')
tbody = soup('table', {"class": "items"})[0].find_all('tr')
for row in tbody:
    cols = row.findChildren(recursive=False)[1:]
    exclude = [0, 3, 4, 6, 7, 8]
    cols = [ele.text.strip() for ele in cols[:] if ele not in exclude]
    writer.writerow(cols)

Моя проблема заключается в том, что из первого столбца Я хочу получить только имя (например, «Ram Strauss»), а не все данные, которые оно содержит.

Не могли бы вы помочь, пожалуйста? Большое спасибо!

1 Ответ

0 голосов
/ 30 марта 2020
import requests , csv

def SaveAsCsv(list_of_rows,file_name):
    try:
        print('\nSaving CSV Result')
        with open(file_name, 'a',  newline='', encoding='utf-8') as outfile:
            writer = csv.writer(outfile)
            writer.writerow(list_of_rows)
            print("rsults saved successully")
    except PermissionError:
        print(f"Please make sure {file_name} is closed \n")


def fetch_data(url,file_name='test.csv'):
        page = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
        if page.status_code == 200 :
                soup = BeautifulSoup(page.content, 'lxml')
                header = [col_name.text.strip() for col_name in soup.select('table.items thead th')[1:]]
                SaveAsCsv(header,file_name)
                rows = soup.select('table.items tbody tr')
                for row in rows:                        
                        name_tag = row.select('img.bilderrahmen-fixed')
                        if name_tag:
                                name = name_tag[0].get('title')
                                tds  = row.select('td')[5:]
                                cols = [ele.text.strip() for ele in tds]
                                if cols :
                                        cols.insert(0,name) 
                                        SaveAsCsv(cols,file_name)

fetch_data('https://www.transfermarkt.com/hapoel-acre/kader/verein/6025/saison_id/2017/plus/1')

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...