Извините за ранее полученный ответ.Я поймал всех на поиске функции щелчка селена, ха-ха.В любом случае, страница, которую вы хотите, является тяжелой Ajax и нуждается в другом подходе, в отличие от традиционного анализа HTML.Пожалуйста, перейдите по ссылке ниже, чтобы узнать больше о том, какой URL вы должны обрабатывать по следующей ссылке: Обработка Ajax .Таким образом, в основном, запускается скрипт, который позволяет разбивать страницы на страницы без изменения основного URL.Буду очень признателен, если кто-нибудь найдет улучшения, чтобы упростить его.
#Import essentials
import requests
from bs4 import BeautifulSoup
#Not necessary, but always useful just in case
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}
#Read url, parse using BeautifulSoup, and dynamically find no of pages
temp_page = requests.get('https://concreteplayground.com/auckland/events', headers=headers)
soup = BeautifulSoup (temp_page.content, 'html.parser')
PgNos = len(soup.findAll('li', {'class':'page'}))
#Now for the interesting part!
#Form the url to which requests are to be sent. This url is used to GET every json response which I've later parsed and printed. This url is available in the network tab of developer tools of your browser (like Firebug)
for i in range(PgNos+1):
u = 'https://concreteplayground.com/ajax.php?post_type=tribe_events&place_type=event®ion=auckland&sort=all&paged='
r = str(i)
l = '&action=directory_search&user_lat=&user_lon='
url = u+r+l
response = requests.get(url, headers=headers)
data = response.json()
#Now,iterate through the main body of the json to get what you want
for each in data['results']:
event_name = each['post_title']
event_excerpt = each['post_excerpt']
#There's a li'l HTML bit here, so you ought'a use BS to parse that.
rdata = each['info']
raw = BeautifulSoup(rdata, 'lxml')
date = raw.p.text
rawvenue = raw.findAll('span', {'itemprop':'name'})
venuename = rawvenue[0].text
venueaddress = rawvenue[0].meta['content']
#Obviously, you can also write to a file in lieu of the below.
print ('Event : ' + event_name + '\n' + 'Excerpt : ' + event_excerpt + '\n' +'Date : ' + date + '\n' + 'Venue : ' + venuename + '\n' + 'Address : ' + venueaddress + '\n\n')
Эти источники также были полезны при реконструкции моего ответа: Объяснение GET и POST и Итерация JSON .