Извлечение href со страницы ленивой загрузки

#python #web-scraping #beautifulsoup

Вопрос:

Я пытаюсь извлечь href с веб-сайта премьер-лиги, однако, похоже, я не могу получить все html-ссылки, кроме как с первой страницы:

 import requests
from bs4 import BeautifulSoup
r = requests.get('https://www.premierleague.com/players/')
soup = BeautifulSoup(r.content, 'lxml')
#get the player index
table = soup.find('div', {'class': 'table playerIndex'})
#<a> is where the href is stored
href_names = [link.get('href') for link in table.findAll('a')]
football_string = 'https://www.premierleague.com'
#concatenate to get the full html link
[football_string   str(x) for x in href_names]
 

Который возвращает только первую страницу — я пробовал использовать selenium , однако на веб-сайте премьер-лиги есть объявление, которое появляется каждый раз, когда оно используется, что мешает ему работать. Есть какие-нибудь идеи о том, как получить все html ссылки?

Ответ №1:

Если я правильно понял ваш вопрос, следующий подход должен это сделать:

 import requests

base = 'https://www.premierleague.com/players/{}/'
link = 'https://footballapi.pulselive.com/football/players'
payload = {
    'pageSize': '30',
    'compSeasons': '418',
    'altIds': 'true',
    'page': 0,
    'type': 'player',
    'id': '-1',
    'compSeasonId': '418'
}
with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    s.headers['referer'] = 'https://www.premierleague.com/'
    s.headers['origin'] = 'https://www.premierleague.com'

    while True:
        res = s.get(link,params=payload)
        if not res.json()['content']:break
        for item in res.json()['content']:
            print(base.format(int(item['id'])))

        payload['page'] =1
 

Результаты такие (усеченные):

 https://www.premierleague.com/players/19970/
https://www.premierleague.com/players/13279/
https://www.premierleague.com/players/13286/
https://www.premierleague.com/players/10905/
https://www.premierleague.com/players/4852/
https://www.premierleague.com/players/4328/
https://www.premierleague.com/players/90665/
 

Комментарии:

1. Это отлично работает! Однако не могли бы вы рассказать мне о том, что вы сделали? Я хотел бы изучить и реализовать это с полными знаниями для будущего веб-скребка

2. Откройте инструменты разработки chrome, выберите network вкладку , а затем выберите All вкладку. Теперь прокрутите страницу, и вы увидите множество ссылок, которые будут созданы ниже Name . Найдите ссылки, видимые как players?pageSize=30amp;compSeasons , а затем нажмите на них. Вы должны получить все подробности о запросах в правой панели. Спасибо.