очистка веб-страниц с помощью BeautifulSoup: чтение таблиц - PullRequest
1 голос
/ 26 сентября 2019

Я пытаюсь получить данные из таблицы на Transfermarkt.com.Мне удалось получить первые 25 записей со следующим кодом.Тем не менее, мне нужно получить остальные записи, которые находятся на следующих страницах.Когда я нажимаю на вторую страницу, URL не меняется.

Я пытался увеличить диапазон в цикле for, но он выдает ошибку.Любое предложение будет оценено.

import numpy as np
import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop'
heads = {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, 
like Gecko) Chrome/70.0.3538.110 Safari/537.36'}

r = requests.get(url, headers = heads)
source = r.text
soup = BeautifulSoup(source, "html.parser")
players = soup.find_all("a",{"class":"spielprofil_tooltip"})
values = soup.find_all("td",{"class":"rechts hauptlink"})

playerslist = []
valueslist = []

for i in range(0,25):
    playerslist.append(players[i].text)
    valueslist.append(values[i].text)
df = pd.DataFrame({"Players":playerslist, "Values":valueslist})

1 Ответ

0 голосов
/ 27 сентября 2019

Измените URL в цикле, а также измените ваши селекторы

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

players = []
values = []
headers = {'User-Agent':'Mozilla/5.0'}

with requests.Session() as s:
    for page in range(1,21):
        r = s.get(f'https://www.transfermarkt.com/spieler-statistik/wertvollstespieler/marktwertetop?ajax=yw1&page={page}', headers=headers)
        soup = bs(r.content,'lxml')
        players += [i.text for i in soup.select('.items .spielprofil_tooltip')]
        values += [i.text for i in soup.select('.items .rechts.hauptlink')]
df = pd.DataFrame({"Players":players, "Values":values})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...