Python Web Scraping 'Нет' - PullRequest
       7

Python Web Scraping 'Нет'

2 голосов
/ 21 апреля 2020

Я пытаюсь очистить данные о событиях с сайта. https://10times.com/losangeles-us/technology/conferences.

. Приведенный ниже код работает и очищает данные о событиях и ссылки на события, найденные на главной целевой странице.

import pandas as pd
import bs4 as bs
import urllib.request

source = urllib.request.urlopen('https://10times.com/losangeles-us/technology/conferences').read()
soup = bs.BeautifulSoup(source,'html.parser')

aa = []
bb = []

#---Get Event Data---
table = soup.find('tbody')
table_rows = table.find_all('tr') #find table rows (tr)
for x in table_rows:   
    data = x.find_all('td')  #find table data
    row = [x.text for x in data]
    if len(row) > 2: #Exlcudes rows with only event name/link, but no data.
        aa.append(row)
df_event = pd.DataFrame(aa, columns=['Date', 'Event Name', 'Venue', 'Description', 'Type', 'Unnamed:'])
df_event.columns = ['Date', 'Event Name', 'Venue', 'Description', 'Type', 'Interested/Following Count']

#---Get Links---
h2 = soup.find_all('h2')
for i in h2:
    links = i.a['href']
    bb.append(links)
df_link = pd.DataFrame(bb)
df_link.columns = ['Links']

#---Combines dfs---#
df = pd.concat([df_event,df_link],sort=False, axis=1)
df.index += 1       

#--Export to HTML---
df.to_html('10times_Scrape.html',render_links=True)

Теперь я хочу go для каждой ссылки на событие, которую я нажал, и очистить описание адреса / полного события, найденное на странице. Пример ссылки: https://10times.com/microsoft-business-applications-summit-anaheim

И описание события, и адрес находятся в тегах P. Однако, когда я читаю в ссылках, я просто возвращаю None's .. Я использую правильный класс div ниже? Что я делаю неправильно? Я хотел бы взглянуть на 'class': 'col-md-6' и извлечь адрес.

#---Get Address---
for i in bb:
    soup2 = bs.BeautifulSoup(i, 'html.parser')
    text2 = soup2.find('div', attrs={'class':'col-md-6'})
    print(text2)

1 Ответ

2 голосов
/ 22 апреля 2020

Похоже, вы пропустили извлечение внутренних ссылок urllib.

#---Get Address---
for i in bb:
    inner_source = urllib.request.urlopen(i).read()

    soup2 = bs.BeautifulSoup(inner_source, 'html.parser')
    text2 = soup2.find('div', 'col-md-6')
    print(text2)

Также с find / find_all вы можете передать класс в качестве второго позиционного параметра. И просто для обеспечения того, что find вернет только первое вхождение, даже если их много.

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