【问题标题】:Webscraping not working with BeautifulSoup网页抓取不适用于 BeautifulSoup
【发布时间】:2021-12-06 21:13:45
【问题描述】:

我正在尝试抓取以下网站:https://resultados.registraduria.gov.co/consejo/541/colombia/amazonas/leticia .但是,当我尝试下面的代码时,我没有从网页的表格中得到任何东西。 beutifulsoup 似乎没有捕获该信息,但似乎与网页的构建方式有关。此外,当我尝试:req = Request(url, headers=headers) 时,我得到了禁止的错误。我如何从该表中获取票数信息以及有效票和空白票顶部的信息?

    headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0"
}
    url ="https://resultados.registraduria.gov.co/consejo/541/colombia/amazonas/leticia"

 
    response = requests.get(url, headers=headers)
    soup =BeautifulSoup(response.content, 'html.parser')
    
    for EachPart in soup.select('div[class*="TablaListas___StyledDiv-sc-1dgusch-3 kLOQyO"]'):
        print EachPart.get_text()

【问题讨论】:

  • 这是因为被检索的页面html是未经Javascript DOM修改的。 requests 模块不处理在 Javascript 运行后检索 DOM,但有一些解决方案可以。该主题将引导您找到答案。 stackoverflow.com/questions/8049520/…

标签: python web-scraping beautifulsoup


【解决方案1】:

url 由 javascript 动态加载。如果您在浏览器中禁用了 javascript,那么您会注意到 url 中的内容消失了,这就是 BeautifulSoup/requests 无法获取数据的原因,因此您需要像 selenium 这样的自动化工具。在这里,我将 selenium 与 BeautifulSoup 一起使用。

脚本

from bs4 import BeautifulSoup
import time
from selenium import webdriver

driver = webdriver.Chrome('chromedriver.exe')
driver.maximize_window()
time.sleep(8)

url = 'https://resultados.registraduria.gov.co/consejo/541/colombia/amazonas/leticia'
driver.get(url)
time.sleep(5)


soup = BeautifulSoup(driver.page_source, 'lxml')
divs = soup.select('.TablaListas__Table-sc-1dgusch-10.iTTvmp div li')
for div in divs:
    name= div.select_one('p.FilaTablaListas___StyledP-sc-1a79vk2-2.lgiJOC').text
    votes = div.select_one('.FilaTablaListas__PorcentajeTexto-sc-1a79vk2-20.dYtRIv ').text
    percentage = div.select_one('.FilaTablaListas__PorcentajeTexto-sc-1a79vk2-20.dYtRIv + span').text
    votes_in_percentage=percentage.replace(',','.')
    print('name:' +name,'votes:' +votes, 'votes_in_percentage:' +votes_in_percentage,end='\n\n')

输出

name:PARTIDO CENTRO DEMOCRATICO votes:321 votes_in_percentage:27.18%

name:PARTIDO LIBERAL COLOMBIANO votes:249 votes_in_percentage:21.08%

name:MOVIMIENTO ALTERNATIVO INDIGENA Y SOCIAL "MAIS" votes:233 votes_in_percentage:19.72%    

name:PARTIDO SOCIAL DE UNIDAD NACIONAL "PARTIDO DE LA U" votes:157 votes_in_percentage:13.29%

name:PARTIDO CONSERVADOR COLOMBIANO votes:47 votes_in_percentage:3.97%

name:JAC BNUEVO votes:38 votes_in_percentage:3.21%

name:PARTIDO ALIANZA VERDE votes:37 votes_in_percentage:3.13%

name:JAC BARRIO CENTRO votes:29 votes_in_percentage:2.45%

name:SEMILLAS DE IDENTIDAD Y AUTONOMIA votes:26 votes_in_percentage:2.20%

name:JAC BARRIO TAUCHI votes:19 votes_in_percentage:1.60%

name:JAC VICTORIA REGIA votes:13 votes_in_percentage:1.10%

name:PARTIDO CAMBIO RADICAL votes:12 votes_in_percentage:1.01%

【讨论】:

    【解决方案2】:

    尝试为“标题”字典使用其他名称。 您也可以尝试将响应变量重写为:

    response = requests.get(url, headers={'User-Agent': 'Chrome'})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 2020-09-17
      相关资源
      最近更新 更多