使用BeautifulSoup和python抓取页面返回标记中的斜杠

我将抓取this page作为第一步,以捕获页面上每个“连续leyendo”的链接。当我使用Inspect Element查看html时,我发现需要定位所有

class = "small-link"

但是当我用BeautifulSoup抓取它时,页面实际上将其返回为

class=\"small-link\"

使用 curl -i https://www.gob.mx/presidencia/es/archivo/articulos?filter_id=5169&filter_origin=archive&idiom=es&page=1

我看到的页面是:

Content-Type: text/javascript; charset=utf-8

我尝试了以下操作,但仍返回转义字符:

soup = BeautifulSoup(site.content,"html.parser",from_encoding='utf-8')

关于如何获得正确的编码的任何建议吗?

yangshegnhui 回答:使用BeautifulSoup和python抓取页面返回标记中的斜杠

以下代码为我解析了该页面,没有所有反斜杠:

import bs4
import urllib2
request = urllib2.Request('https://www.gob.mx/presidencia/es/archivo/articulos?filter_id=5169&filter_origin=archive&idiom=es&page=1')
request.add_header('Accept-Encoding','utf-8')
response = urllib2.urlopen(request)
soup = bs4.BeautifulSoup(response)

摘自这篇文章: How to correctly parse UTF-8 encoded HTML to Unicode strings with BeautifulSoup?

,

您还可以使用requests模块(pip3 install requests):

import requests
from bs4 import BeautifulSoup as soup
d = soup(requests.get('https://www.gob.mx/presidencia/es/archivo/articulos?filter_id=5169&filter_origin=archive&idiom=es&page=1').text,'html.parser')
result = [{'img':i.div.img['src'],'time':i.time.text,'text':i.h2.text,'link':i.a['href']} for i in d.find_all('article')]

要获取链接,您可以遍历result并访问每个链接的link键。这些链接是相对的,因此要创建完整的URL,可以使用urllib.parse

import urllib.parse
base = 'https://www.gob.mx/presidencia/es/archivo/articulos?filter_id=5169&filter_origin=archive&idiom=es&page=1'
links = [urllib.parse.urljoin(base,i['link']) for i in result]   

输出:

['https://www.gob.mx/presidencia/es/articulos/version-estenografica-de-la-conferencia-de-prensa-matutina-jueves-14-de-noviembre-2019?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-de-la-conferencia-de-prensa-matutina-miercoles-13-de-noviembre-2019?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-de-la-conferencia-de-prensa-matutina-martes-12-de-noviembre-2019?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-de-la-conferencia-de-prensa-matutina-lunes-11-de-noviembre-2019?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-dialogo-con-los-pueblos-maya-peninsular-ch-ol-tsotsil-tseltal-y-poblacion-indigena-migrante-desde-calakmul?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-dialogo-con-el-pueblo-maya-peninsular-y-poblacion-indigena-migrante-desde-felipe-carrillo-puerto?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-dialogo-con-el-pueblo-maya-peninsular-desde-temozon?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-dialogo-con-el-pueblo-maya-peninsular-desde-tekax-de-alvaro-obregon?idiom=es','https://www.gob.mx/presidencia/es/articulos/version-estenografica-de-la-conferencia-de-prensa-matutina-viernes-8-de-noviembre-2019?idiom=es']
,

我使用了适用于python 3.7的urllib3 您可以在userguide

中找到详细信息
import urllib3
http = urllib3.PoolManager()
request = http.request('get','URL-HERE')
soup = BeautifulSoup(request.data,"html.parser")
本文链接:https://www.f2er.com/3095266.html

大家都在问