BeautifulSoup使用find_all方法乱码问题

   request = urllib2.Request(url,headers = headers)
    response = urllib2.urlopen(request)

    content = response.read()

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

    node = soup.find_all('div',class_="article block untagged mb15")

   print node




抓取页面的编码是utf-8,但使用find_all()方法输出node后就会产生乱码:

解决办法

这里FindALL是一个list,要输应该循环输出

for _ in FindALL:
    print _.encode('utf-8')


如果在使用BeautifulSoup解析HTML文档时出现乱码,有以下几种可能的原因: 1. 网站使用了非UTF-8编码:可以尝试将BeautifulSoup的解析器参数改成网站实际使用的编码方式。 2. 网站使用了动态加载,无法获取完整的HTML文档:可以使用Selenium等工具模拟浏览器行为获取完整的HTML文档。 3. requests获取的响应内容格式不对:可以尝试使用response.content代替response.text,或者指定requests的编码方式。 在这段代码中,如果出现了乱码,可以尝试将BeautifulSoup的解析器参数改成网站实际使用的编码方式。例如,如果网站使用了GBK编码,可以将解析器参数改为"html.parser"或者"lxml",并且指定编码方式为'GBK': ```python import requests from bs4 import BeautifulSoup url = "https://www.shu.edu.cn/" headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} response = requests.get(url, headers=headers) response.encoding = 'GBK' # 指定编码方式为GBK html = response.text soup = BeautifulSoup(html, "html.parser") # 或者使用lxml解析器 content_all = soup.find_all("a") for content in content_all: contentstring = content.text if contentstring != None: print(contentstring) ``` 需要注意的是,如果网站使用的是动态加载方式,这种方法可能无法获取完整的HTML文档,需要使用Selenium等工具模拟浏览器行为获取完整的HTML文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值