Beautifulsoup веб-соскоб сайт с выпадающим меню - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь очистить сайт с выпадающим меню, в котором пользователь может выбрать год для отображения данных.Однако я, похоже, застрял в своей реализации этого.

Вот URL-адрес веб-сайта: https://www.pgatour.com/tournaments/masters-tournament/past-results.html

Это персональный проект для сбора данных о гольфе для каждого крупного турнира для каждогогод.Я знаю, как получить желаемую статистику после выбора года.

Вот пример HTML-кода веб-сайтов для выпадающего меню

<select name="year" id="pastResultsYearSelector" class="hasCustomSelect"
style="-webkit-appearance: menulist-button; width: 180px; position: absolute;
opacity: 0; height: 42px; font-size: 18px;">
            <option value="2019" selected="selected">2019</option>
            <option value="2018">2018</option>
            <option value="2017">2017</option>
            <option value="2016">2016</option>

Вот что я пробовалпока:

headers = {
    'user-agent': 
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'
    }

data = {
    'name':'2019', 'id':'pastResultYearSelector', 'class':'hasCustomSelect',
    'style':'-webkit-appearance: menulist-button; width: 180px; position: absolute; opacity: 0; height: 42px; font-size: 18px;'
    }

url = "https://www.pgatour.com/tournaments/masters-tournament/past-results.html"

r = requests.post(url, data=data, headers=headers, timeout=20)

soup = BeautifulSoup(r.text, 'html.parser')

Однако мой запрос кажется недействительным, так как я получаю ответ о том, что запрошенная страница не найдена.

1 Ответ

0 голосов
/ 17 апреля 2019

Как уже упоминалось в комментариях, вы можете использовать следующую конструкцию URL, которую страница делает для обновления контента по годам

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.pgatour.com/content/pgatour/tournaments/masters-tournament/past-results/jcr:content/mainParsys/pastresults.selectedYear.{}.html'.format(2017))

soup = bs(r.content, 'lxml')

Возможно, вы захотите изменить некоторые данные, но вы можете использовать панд, чтобы взять ручку таблицы

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

r = requests.get('https://www.pgatour.com/content/pgatour/tournaments/masters-tournament/past-results/jcr:content/mainParsys/pastresults.selectedYear.{}.html'.format(2017))
soup = bs(r.content, 'lxml')
table = pd.read_html(str(soup.select_one('table')))[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...