简体   繁体   中英

Passing variables in soup.find_all()

I want to send variables into find_all(), this is my code:

import requests
from bs4 import BeautifulSoup

url = 'https://www.elheraldo.co'
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
new = soup.find_all(class_=['titulo'])

In the example above I'm using a two constants, the url and class_=['titulo'] but I want to automate this considering this data:

newspapers = {'https://www.elheraldo.co': "class_=['titulo']",
              'https://www.zonacero.com': "'div', class_=['title']",
              'https://www.elpilon.com.co': "class_=['land-see-post-title']",
              'https://www.eluniversal.com.co': "'div', class_=['headline']",
              'https://www.diariodelcesar.com': "'h2', class_=['title']",
              'https://www.hoydiariodelmagdalena.com.co': "'h2', class_=['title']",
              'https://www.diariodelnorte.net': "'h3', itemprop=['name']"}

This can be automated like this:

import requests
from bs4 import BeautifulSoup

newspapers = {
              'https://www.elheraldo.co': "class_=['titulo']",
              'https://www.zonacero.com': "'div', class_=['title']",
              'https://www.elpilon.com.co': "class_=['land-see-post-title']",
              'https://www.eluniversal.com.co': "'div', class_=['headline']",
              'https://www.diariodelcesar.com': "'h2', class_=['title']",
              'https://www.hoydiariodelmagdalena.com.co': "'h2', class_=['title']",
              'https://www.diariodelnorte.net': "'h3', itemprop=['name']"
             }

for url,clas in newspapers.items():
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    new = soup.find_all(clas)

I suggest to having the values of the dictionary as CSS selectors which you can put into soup.select() method.

For example:

import requests
from bs4 import BeautifulSoup


newspapers = {'https://www.elheraldo.co': ".titulo",
              'https://www.zonacero.com': "div.title",
              'https://www.elpilon.com.co': ".land-see-post-title",
              'https://www.eluniversal.com.co': "div.headline",
              'https://www.diariodelcesar.com': "h2.title",
              'https://www.hoydiariodelmagdalena.com.co': "h2.title",
              'https://www.diariodelnorte.net': 'h3[itemprop="name"]'}

for url, css_selector in newspapers.items():
    soup = BeautifulSoup(requests.get(url).content, 'html.parser')
    print(url, css_selector)
    for i, t in enumerate(soup.select(css_selector), 1):
        print(i, t.get_text(strip=True))
    print('-' * 80)

Prints:

https://www.elheraldo.co .titulo
1 En Barranquilla, toma de muestras se ha cuadruplicado
2 En octubre arrancan obras del viejo muelle de Puerto Colombia
3 “Saab conoce los contactos criminales de Maduro en el mundo”: exfiscal
4 Histórica: así será la primera instalación virtual del Congreso
5 El Editorial | Aumentar las pruebas
6 “Necesitan abrazos de paisanos”: alcalde de Tasajera sobre las víctimas
7 Gobernador del Cesar tiene cinco investigaciones activas
8 Por lío de invasión, obras de clínica en Barranquilla están paralizadas
9 El Rodadero será piloto para reapertura de playas samarias
10 EPS en Bolívar prometen aumentar número de pruebas COVID-19
11 Bebé prematura supera COVID-19 en Valledupar
12 Minsalud anuncia bloqueos epidemiológicos en Montería y Sincelejo
13 6 mil mujeres cabeza de hogar se formarán para tener autonomía económica
14 En video | Declaran calamidad pública en El Laguito por emergencia ambiental
15 Reportan estafa a través de cadena de WhatsApp
16 Jorge Enrique Vélez, con las horas contadas en la presidencia de Dimayor
17 Tres bajas tendrá el ‘Vuelo del Deporte’
18 Declaran improcedente la tutela de la FCF contra fallo de la SIC
19 Egan Bernal promete que luchará para ganar su segundo Tour de Francia
20 “No tenemos ninguna propuesta concreta por Rangel”: Antonio Char
21 Increíble: ya venden el modelo pirata de la nueva camiseta de Junior
22 Esta es la nueva camiseta de Junior
23 ChocQuibTown y Dalex le cantan a los amores tóxicos en nuevo tema
24 Diversión y romance en ‘Querida’, lo nuevo de Piso 21 y Feid
25 Vaech debuta como solista con ‘Mal de amor’
26 Tini y Khea lanzan ‘Ella dice’
27 Rutinas de ejercicios para niños y adultos mayores
28 'Puede', el nuevo comienzo de Ruggero
29 La Covid-19 acabó con la vida del cantautor Víctor Víctor
30 La sesión ha sido cerrada con exíto
31 Por favor, complete su información de registroaquí
32 DETECTAMOS QUE TIENES UN BLOQUEADOR DE ANUNCIOS ACTIVADO
--------------------------------------------------------------------------------
https://www.zonacero.com div.title
1 No existen fronteras: Tecnoglass y su equipo voluntario llegaron con 1.000 mercados a Tasajera
2 Con el reporte de este viernes de Minsalud, Soledad llegó a los 516 muertos por Covid-19
3 ¿Quién le pone la lupa a los cuestionables contratos de la Contraloría y la Fiscalía en medio del coronavirus?
4 Declaran improcedente tutela de Federación de Fútbol contra Mincomercio y SIC

... and so on.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM