Как распечатать и отобразить все результаты веб-скребка? - PullRequest
1 голос
/ 17 февраля 2020
import requests
from bs4 import BeautifulSoup

URL = ""
page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find(id='simple-view')

events_elems = results.find_all('ul', class_='searchResults')

for event_elem in events_elems:

    date_elem = event_elem.find('li', class_='date-indicator')
    location_elem = event_elem.find('div', class_='text--labelSecondary')
    e_elem = event_elem.find('a', class_='event')
    if None in (date_elem,location_elem, e_elem):
        continue
    print(date_elem.text)
    print(location_elem.text)
    print(e_elem.text)

Я только начинаю играть с python функцией очистки веб-страниц, пытаясь очистить на meetup.com приведенный выше код, но показан только один набор результатов, что-то не так я сделал в разделе итерации

1 Ответ

1 голос
/ 17 февраля 2020

.find_all, который вы использовали в

events_elems = results.find_all('ul', class_='searchResults')

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

event_elem.find('li', class_='date-indicator') вы используется также недостаточно, поскольку он не захватывает дату каждого отдельного события.


См. следующий рабочий код, который захватывает набор результатов в контейнере списка событий:

import requests
from bs4 import BeautifulSoup

URL = "https://www.meetup.com/find/events/"
page = requests.get(URL)

soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find(id='simple-view')

event_container = results.find_all('ul', class_='event-listing-container')[0]
events_elems = event_container.find_all(class_= 'event-listing')    

for event_elem in events_elems:

    location_elem = event_elem.find('div', class_='text--labelSecondary')
    e_elem = event_elem.find('a', class_='event')    
    date = "{}-{}-{} {}".format(
        event_elem.attrs['data-year'],
        event_elem.attrs['data-month'],
        event_elem.attrs['data-day'],
        event_elem.find('time').text.replace('\n', ''),
    )

    print(date)
    print(location_elem.text)
    print(e_elem.text)
    print('-----')

с выходом образца

2020-2-17 9:00AM


Architecting for Innovation



Australasian Enterprise Architecture Summer School 2020

-----
2020-2-17 5:00PM


Sydney Indoor Rock Climbers



Monday and Thursday Night Climbing @ St Peters (Beginners Welcome)

-----
2020-2-17 5:30PM

......
......

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...