在soup.find_all()中传递变量

2024-10-03 13:19:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将变量发送到find_all(),这是我的代码:

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'])

在上面的示例中,我使用了两个常量,urlclass_=['titulo'],但考虑到这些数据,我想自动执行此操作:

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']"}

Tags: httpsimportcomurltitlewwwpageall
2条回答

这可以像这样自动化:

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)

我建议将字典的值作为CSS选择器,您可以将其放入soup.select()方法中

例如:

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)

印刷品:

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.

相关问题 更多 >