【问题标题】: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()
【问题讨论】:
标签:
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'})