Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在soup.find_all()中传递变量_Python_Python 3.x_Web Scraping_Beautifulsoup - Fatal编程技术网

Python 在soup.find_all()中传递变量

Python 在soup.find_all()中传递变量,python,python-3.x,web-scraping,beautifulsoup,Python,Python 3.x,Web Scraping,Beautifulsoup,我想将变量发送到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']) 在上面的示例中,我使用了两个常量,url和class_=

我想将变量发送到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']"}

这可以像这样自动化:

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.

此解决方案不起作用,因为find_all未接收字符串作为参数。谢谢