Как определить «source.find» часть BeautifulSoup - PullRequest
2 голосов
/ 05 мая 2019

Мне нужно почистить список ссылок на рестораны с сайта доставки еды, чтобы потом почистить их меню. Это сайт, который я хочу почистить: https://www.pedidosya.com.ar/restaurantes/buenos-aires/monserrat/empanadas-delivery?bt=RESTAURANT&page=1

Проверка HTML:

<a href="https://www.pedidosya.com.ar/restaurantes/buenos-aires/el- 
noble-galerias-pacifico-menu" title="El Noble Galerías Pacífico" 
class="arrivalName">El Noble Galerías Pacífico</a>

Детали, которые меня интересуют:

URL = https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-noble-galerias-pacifico-menu

ИМЯ = El Noble Galerías Pacífico

Сохраняется в разных списках, а затем создается .CSV

Сайт имеет несколько страниц, но я вернусь к этому вопросу позже, хахах. Это мой код:

urls = []

source = BeautifulSoup(page_soup, "html.parser")
table = source.find('h3', attrs={'a': 'arrivalName'})
for a in table.find_all("a", href=True):
    print(a)
    urls.append(a)

Я получаю эту ошибку: Ошибка типа: объект 'NoneType' не вызывается

Ответы [ 2 ]

0 голосов
/ 05 мая 2019

Вот способ перебрать страницы, извлечь данные и выгрузить в CSV без панд:

import csv
import requests
from bs4 import BeautifulSoup

base = "https://www.pedidosya.com.ar/restaurantes/buenos-aires/monserrat/empanadas-delivery?bt=RESTAURANT&page="
restaurants = [["name", "url"]]
page = 1

while True:
    soup = BeautifulSoup(requests.get(base + str(page)).text, "html.parser")
    elements = soup.find_all("a", href=True, attrs={"class": "arrivalName"})
    page += 1

    if not elements: break

    for elem in elements:
        restaurants.append([elem.text, elem["href"]])

with open("restaurants.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerows(restaurants)

Вывод содержимого CSV:

name,url
CaracasBread,https://www.pedidosya.com.ar/restaurantes/buenos-aires/caracasbread-menu
El Noble Galerías Pacífico,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-noble-galerias-pacifico-menu
El Hornero de San Telmo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-hornero-de-san-telmo-menu
Kiosco De Empanadas - Microcentro,https://www.pedidosya.com.ar/restaurantes/buenos-aires/kiosco-de-empanadas-microcentro-menu
Pata Pizza Saavedra,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pata-pizza-saavedra-menu
Aji Argentina,https://www.pedidosya.com.ar/restaurantes/buenos-aires/aji-argentina-menu
El Banco Rojo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-banco-rojo-menu
Pizzería La Bomba,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizzeria-la-bomba-menu
Lopecito,https://www.pedidosya.com.ar/restaurantes/buenos-aires/lopecito-menu
Tía Luisa,https://www.pedidosya.com.ar/restaurantes/buenos-aires/tia-luisa-menu
El Codo de Oro,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-codo-de-oro-menu
Pizzeria Genova Av. Corrientes,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizzeria-genova-av-corrientes-menu
Arepas Tricolor,https://www.pedidosya.com.ar/restaurantes/buenos-aires/arepas-tricolor-menu
Parados Urban Food,https://www.pedidosya.com.ar/restaurantes/buenos-aires/parados-urban-food-menu
Angélica,https://www.pedidosya.com.ar/restaurantes/buenos-aires/angelica-menu
Fratello's San Cristóbal,https://www.pedidosya.com.ar/restaurantes/buenos-aires/fratellos-san-cristobal-menu
Cartagena Bar,https://www.pedidosya.com.ar/restaurantes/buenos-aires/cartagena-bar-menu
Mr Sandwich - San Telmo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/mr-sandwich-san-telmo-menu
Capataz,https://www.pedidosya.com.ar/restaurantes/buenos-aires/capataz-menu
Pizza Alla Pala Entre Rios,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizza-alla-pala-entre-rios-menu
Sushi Boom,https://www.pedidosya.com.ar/restaurantes/buenos-aires/sushi-boom-menu
Pizzería Don Cruz,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizzeria-don-cruz-menu
Pizzería Grandi,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizzeria-grandi-menu
Nápoles,https://www.pedidosya.com.ar/restaurantes/buenos-aires/napoles-menu
Pizza Yerman Rodríguez Peña,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizza-yerman-rodriguez-pena-menu
La Cacerola de Monserrat,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-cacerola-de-monserrat-menu
El SanguCHE,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-sanguche-menu
Alameda Restaurante,https://www.pedidosya.com.ar/restaurantes/buenos-aires/alameda-restaurante-menu
i Fresh Resto,https://www.pedidosya.com.ar/restaurantes/buenos-aires/i-fresh-resto-menu
De Diez,https://www.pedidosya.com.ar/restaurantes/buenos-aires/de-diez-menu
I Fresh Deli,https://www.pedidosya.com.ar/restaurantes/buenos-aires/i-fresh-deli-menu
Amelia's Balvanera,https://www.pedidosya.com.ar/restaurantes/buenos-aires/amelias-balvanera-menu
Defensa Bar Restaurant,https://www.pedidosya.com.ar/restaurantes/buenos-aires/defensa-bar-restaurant-menu
Defensa II Pizzería bar restaurante,https://www.pedidosya.com.ar/restaurantes/buenos-aires/defensa-ii-pizzeria-bar-restaurante-menu
Hachi's Burger 67,https://www.pedidosya.com.ar/restaurantes/buenos-aires/hachi-s-burger-67-menu
Sandwich Factory,https://www.pedidosya.com.ar/restaurantes/buenos-aires/sandwich-factory-menu
Victoria - Bar Notable,https://www.pedidosya.com.ar/restaurantes/buenos-aires/victoria-bar-notable-menu
La Rosa de Guadalupe Heladería,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-rosa-de-guadalupe-heladeria-menu
El Rincón de las Hamburguesas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-rincon-de-las-hamburguesas-menu
La Farola de Abasto,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-farola-abasto-menu
ATR 1 Night! Drinks and Fast Food,https://www.pedidosya.com.ar/restaurantes/buenos-aires/atr-1-night-drinks-and-fast-food-menu
La Farola de Congreso,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-farola-de-congreso-menu
Natacha,https://www.pedidosya.com.ar/restaurantes/buenos-aires/natacha-menu
Empanadas de 10 Balvanera,https://www.pedidosya.com.ar/restaurantes/buenos-aires/empanadas-de-10-balvanera-menu
Mostachole Empanadas Gourmet,https://www.pedidosya.com.ar/restaurantes/buenos-aires/mostachole-empanadas-gourmet-menu
El Noble Barracas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-noble-barracas-menu
El Noble San Cristóbal,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-noble-san-cristobal-menu
Morita Montserrat,https://www.pedidosya.com.ar/restaurantes/buenos-aires/morita-montserrat-menu
Kiosco de Empanadas Congreso,https://www.pedidosya.com.ar/restaurantes/buenos-aires/kiosco-de-empanadas-congreso-menu
Homero Pizzas Almagro,https://www.pedidosya.com.ar/restaurantes/buenos-aires/homero-pizzas-almagro-menu
Xiang Xing,https://www.pedidosya.com.ar/restaurantes/buenos-aires/xiang-xing-menu
Ketchup Flores,https://www.pedidosya.com.ar/restaurantes/buenos-aires/ketchup-flores-menu
Keni's,https://www.pedidosya.com.ar/restaurantes/buenos-aires/keni-s-menu
Keni's,https://www.pedidosya.com.ar/restaurantes/buenos-aires/keni-s-menu
Lo de Ale,https://www.pedidosya.com.ar/restaurantes/buenos-aires/lo-de-ale-menu
Lo de Ale,https://www.pedidosya.com.ar/restaurantes/buenos-aires/lo-de-ale-menu
Pedro Telmo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pedro-telmo-menu
Pedro Telmo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pedro-telmo-menu
Villegas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/villegas-menu
Villegas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/villegas-menu
Fox Palermo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/fox-palermo-menu
Urban Food Raúl Scalabrini Ortíz,https://www.pedidosya.com.ar/restaurantes/buenos-aires/urban-food-ra%C3%BAl-scalabrini-ort%C3%ADz-menu
Papelon,https://www.pedidosya.com.ar/restaurantes/buenos-aires/papelon-menu
Empanadas Express - Suipacha,https://www.pedidosya.com.ar/restaurantes/buenos-aires/empanadas-express-suipacha-menu
Empanadas Gourmet Microcentro,https://www.pedidosya.com.ar/restaurantes/buenos-aires/empanadas-gourmet-microcentro-menu
Empanadas Gourmet Microcentro,https://www.pedidosya.com.ar/restaurantes/buenos-aires/empanadas-gourmet-microcentro-menu
Empanairo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/empanairo-menu
Solo Super Hamburguesas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/solo-super-hamburguesas-menu
Empanadas Factory,https://www.pedidosya.com.ar/restaurantes/buenos-aires/empanadas-factory-menu
Bocanada,https://www.pedidosya.com.ar/restaurantes/buenos-aires/bocanada-menu
D'Mosqueras,https://www.pedidosya.com.ar/restaurantes/buenos-aires/d-mosqueras-menu
Caro Fratello Pizzería,https://www.pedidosya.com.ar/restaurantes/buenos-aires/caro-fratello-pizzeria-menu
Señora Empanada,https://www.pedidosya.com.ar/restaurantes/buenos-aires/senora-empanada-menu
Señora Empanada,https://www.pedidosya.com.ar/restaurantes/buenos-aires/senora-empanada-menu
El Conde,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-conde-pizza-empanadas-menu
El Conde,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-conde-pizza-empanadas-menu
El Simoqueño,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-simoqueno-menu
El Simoqueño,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-simoqueno-menu
El Maestro Pizzas y Empanadas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-maestro-pizzas-y-empanadas-menu
El Maestro Pizzas y Empanadas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-maestro-pizzas-y-empanadas-menu
La Napolitana,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-napolitana-menu
La Napolitana,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-napolitana-menu
La Bella Vita,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-bella-vita-menu
Pizzería La Bomba,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizzeria-la-bomba-menu
Pizzería La Bomba,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizzeria-la-bomba-menu
Don Armando San Telmo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/don-armando-san-telmo-menu
Sei Tu Entre Ríos,https://www.pedidosya.com.ar/restaurantes/buenos-aires/sei-tu-entre-rios-menu
La Nueva Salomé,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-nueva-salome-menu
Kalinka Bistró,https://www.pedidosya.com.ar/restaurantes/buenos-aires/kalinka-bistro-menu
La Continental Avenida,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-continental-avenida-menu
La Continental Avenida,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-continental-avenida-menu
La Continental Entre Ríos 415,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-continental-entre-rios-415-menu
La Continental Entre Ríos 415,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-continental-entre-rios-415-menu
Los 36 Billares,https://www.pedidosya.com.ar/restaurantes/buenos-aires/los-36-billares-menu
Los 36 Billares,https://www.pedidosya.com.ar/restaurantes/buenos-aires/los-36-billares-menu
Hausbrot Recoleta,https://www.pedidosya.com.ar/restaurantes/buenos-aires/hausbrot-recoleta-menu
Hausbrot Santa Fe,https://www.pedidosya.com.ar/restaurantes/buenos-aires/hausbrot-santa-fe-menu
"Sergio, Casa de Comidas",https://www.pedidosya.com.ar/restaurantes/buenos-aires/sergio-casa-de-comidas-menu
Chelvíe,https://www.pedidosya.com.ar/restaurantes/buenos-aires/chelvie-menu
Chelvíe,https://www.pedidosya.com.ar/restaurantes/buenos-aires/chelvie-menu
Señora Empanada,https://www.pedidosya.com.ar/restaurantes/buenos-aires/senora-empanada-menu
La Bella Vita,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-bella-vita-menu
La Continental Entre Ríos 415,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-continental-entre-rios-415-menu
El Conde,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-conde-pizza-empanadas-menu
La Nueva Salomé,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-nueva-salome-menu
Kalinka Bistró,https://www.pedidosya.com.ar/restaurantes/buenos-aires/kalinka-bistro-menu
El Simoqueño,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-simoqueno-menu
El Maestro Pizzas y Empanadas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/el-maestro-pizzas-y-empanadas-menu
24k,https://www.pedidosya.com.ar/restaurantes/buenos-aires/24k-menu
Hausbrot Recoleta,https://www.pedidosya.com.ar/restaurantes/buenos-aires/hausbrot-recoleta-menu
La Continental Avenida,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-continental-avenida-menu
La Napolitana,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-napolitana-menu
Chelvíe,https://www.pedidosya.com.ar/restaurantes/buenos-aires/chelvie-menu
"Sergio, Casa de Comidas",https://www.pedidosya.com.ar/restaurantes/buenos-aires/sergio-casa-de-comidas-menu
Solera Mesón,https://www.pedidosya.com.ar/restaurantes/buenos-aires/solera-meson-menu
Los 36 Billares,https://www.pedidosya.com.ar/restaurantes/buenos-aires/los-36-billares-menu
Baguette & Co.,https://www.pedidosya.com.ar/restaurantes/buenos-aires/baguette-co-menu
Hausbrot Santa Fe,https://www.pedidosya.com.ar/restaurantes/buenos-aires/hausbrot-santa-fe-menu
Parrilla El Formoseño,https://www.pedidosya.com.ar/restaurantes/buenos-aires/parrilla-el-formoseno-menu
Tío Felipe,https://www.pedidosya.com.ar/restaurantes/buenos-aires/tio-felipe-menu
Arbol De Café,https://www.pedidosya.com.ar/restaurantes/buenos-aires/arbol-de-caf%C3%A9-menu
Don Valentin,https://www.pedidosya.com.ar/restaurantes/buenos-aires/don-valentin-menu
Bargley,https://www.pedidosya.com.ar/restaurantes/buenos-aires/bargley-menu
Colombian Coffe - Store,https://www.pedidosya.com.ar/restaurantes/buenos-aires/colombian-coffe-store-menu
Pizzeria la Torre de Retiro,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pizzeria-la-torre-de-retiro-menu
Cristobalino,https://www.pedidosya.com.ar/restaurantes/buenos-aires/cristobalino-menu
Manolo Bufette Bar,https://www.pedidosya.com.ar/restaurantes/buenos-aires/manolo-bufette-bar-menu
Il Fratello Ristorante,https://www.pedidosya.com.ar/restaurantes/buenos-aires/ilfratello-ristorante-menu
Tagliata,https://www.pedidosya.com.ar/restaurantes/buenos-aires/tagliata-menu
Javi's Parrilla - Restaurant,https://www.pedidosya.com.ar/restaurantes/buenos-aires/javi-s-parrilla-restaurant-menu
Bar El Crack,https://www.pedidosya.com.ar/restaurantes/buenos-aires/bar-el-crack-menu
Solera,https://www.pedidosya.com.ar/restaurantes/buenos-aires/solera-menu
Malva Café Resto Bar,https://www.pedidosya.com.ar/restaurantes/buenos-aires/malva-cafe-resto-bar-menu
Sabri - Comidas Ricas,https://www.pedidosya.com.ar/restaurantes/buenos-aires/sabri-comidas-ricas-menu
Hendriks,https://www.pedidosya.com.ar/restaurantes/buenos-aires/hendriks-menu
D'oro Italian Bar,https://www.pedidosya.com.ar/restaurantes/buenos-aires/d-oro-italian-bar-menu
Nueva Era - Parrilla Restaurant,https://www.pedidosya.com.ar/restaurantes/buenos-aires/nueva-era-parrilla-restaurant-menu
Plan B,https://www.pedidosya.com.ar/restaurantes/buenos-aires/plan-b-menu
Los Amigos San Telmo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/los-amigos-san-telmo-menu
Cannarelli Pescados & Mariscos,https://www.pedidosya.com.ar/restaurantes/buenos-aires/cannarelli-pescados-mariscos-menu
Vos y Yo,https://www.pedidosya.com.ar/restaurantes/buenos-aires/vos-y-yo-menu
Nico's Bar Porteño,https://www.pedidosya.com.ar/restaurantes/buenos-aires/nico-s-bar-porteno-menu
Lo Nuestro café y resto,https://www.pedidosya.com.ar/restaurantes/buenos-aires/lo-nuestro-cafe-y-resto-menu
Buen Provecho,https://www.pedidosya.com.ar/restaurantes/buenos-aires/buen-provecho-menu
Paulis Fast Good - Café,https://www.pedidosya.com.ar/restaurantes/buenos-aires/paulis-fast-good-cafe-menu
La Academia,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-academia-menu
Food & Coffee,https://www.pedidosya.com.ar/restaurantes/buenos-aires/food-%26-coffee-menu
Junin Chioco,https://www.pedidosya.com.ar/restaurantes/buenos-aires/junin-chioco-menu
Babilonia Talcahuano,https://www.pedidosya.com.ar/restaurantes/buenos-aires/babilonia-talcahuano-menu
Pola,https://www.pedidosya.com.ar/restaurantes/buenos-aires/pola-menu
La Perla Recoleta,https://www.pedidosya.com.ar/restaurantes/buenos-aires/la-perla-recoleta-menu
Rotisería Vegetariana La Verde,https://www.pedidosya.com.ar/restaurantes/buenos-aires/rotiseria-vegetariana-la-verde-menu
0 голосов
/ 05 мая 2019

Вы можете использовать имя класса для таргетинга ссылок ресторана, затем извлечь href для ссылки и .text для имени.Я создаю df как tidier, но вы можете вырезать столбец имени и ссылку.

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd
import math

url = 'https://www.pedidosya.com.ar/restaurantes/buenos-aires/monserrat/empanadas-delivery?bt=RESTAURANT&page=1'
results = []
with requests.Session() as s:
    r = requests.get(url)
    soup = bs(r.content, 'lxml')
    restuarants = [(item.text, item['href']) for item in soup.select('.arrivalName')]
    results.append(restuarants)
    num_per_page = 50
    total = int(soup.select_one('.addressTitle i').text)
    num_pages = math.ceil(total/num_per_page)
    if num_pages > 1:
        for page in range(2, num_pages + 1):
            r = s.get('https://www.pedidosya.com.ar/restaurantes/buenos-aires/monserrat/empanadas-delivery?bt=RESTAURANT&page=1'.format(page))     
            soup = bs(r.content, 'lxml')
            restuarants = [(item.text, item['href']) for item in soup.select('.arrivalName')]
            results.append(restuarants)

final =  [item for sublist in results for item in sublist]
df = pd.DataFrame(final, columns = ['name', 'link'])
df.to_csv(r"C:\Users\User\Desktop\Data.csv", sep=',', encoding='utf-8-sig',index = False ) 
...