использовать красивый суп для симуляции щелчка страницы, чтобы получить доступ ко всему HTML на странице? - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь почистить следующий сайт:

https://www.bandsintown.com/?came_from=257&sort_by_filter=Number+of+RSVPs

Я могу успешно очистить события, перечисленные на странице, с помощью Beautifulsoup, используя следующий код:

from bs4 import BeautifulSoup
import requests
url = 'https://www.bandsintown.com/?came_from=257&sort_by_filter=Number+of+RSVPs'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')


dates = soup.find_all('div', {'class': 'event-b58f7990'})
month=[]
day=[]
for i in dates:
    md = i.find_all('div')
    month.append(md[0].text)
    day.append(md[1].text)

Однако проблема, с которой я столкнулся, заключается в том, что я могу очистить только первые 18 событий - остальная часть страницы доступна только при нажатии кнопки «Просмотреть все» внизу. Есть ли способ в BeautifulSoup или каким-либо другим способом смоделировать нажатие этой кнопки, чтобы я мог очистить ВСЕ данные? Я бы предпочел оставить это в python, так как я делаю большую часть работы с Beautifulsoup. Большое спасибо!

1 Ответ

0 голосов
/ 07 января 2019

Если вы можете определить конечную точку или установить конечную точку для диапазона следующим образом (с обработкой ошибок, чтобы зайти слишком далеко), вы можете получить ответ json и проанализировать требуемую информацию следующим образом. В зависимости от того, сколько запросов вы делаете, вы можете повторно использовать соединение с сеансом.

import requests
import pandas as pd

url = 'https://www.bandsintown.com/upcomingEvents?came_from=257&sort_by_filter=Number+of+RSVPs&page={}&latitude=51.5167&longitude=0.0667'
results = []
for page in range(1,20):
    data = requests.get(url.format(page)).json()
    for item in data['events']:
        results.append([item['artistName'], item['eventDate']['day'],item['eventDate']['month']])
df = pd.DataFrame(results)
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...