Запрос на очистку нескольких страниц с помощью Beautifulsoup - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь очистить страницу с помощью Beautifulsoup по ссылке на сайт - https://concreteplayground.com/auckland/events.Мне удалось извлечь все со страницы 1. Когда я захотел перейти на следующую страницу, я не смог найти никакой ссылки на ссылку / разбор следующей страницы. Я попытался осмотреть страницу, и когда я проверял, чтобы перейти на страницу 2, я нахожусодержание следующим образом -

<a rel="nofollow" class="page-numbers" href="">2</a>

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

1 Ответ

0 голосов
/ 26 мая 2018

Извините за ранее полученный ответ.Я поймал всех на поиске функции щелчка селена, ха-ха.В любом случае, страница, которую вы хотите, является тяжелой 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&region=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 .

...