BeautifulSoup/Requests抓取网页部分title乱码缺失问题求助
解决网页抓取中的乱码问题
问题原因
你手动设置了req.encoding = 'cp1251',但该编码与网页实际返回的内容编码不匹配,导致解析部分a标签的title属性时出现乱码。另外,直接使用req.text可能会因为编码转换错误丢失原始字节信息。
解决方案
修改编码处理逻辑,让requests和BeautifulSoup自动处理编码,同时指定更可靠的HTML解析器:
import pandas as pd import requests from bs4 import BeautifulSoup import time headers = { 'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Mobile Safari/537.36' } req = requests.get('https://stroit-kompanii.ru', headers=headers) time.sleep(3) # 使用原始字节流让BeautifulSoup自动检测编码,指定lxml解析器 soup = BeautifulSoup(req.content, 'lxml') all_cat_list = soup.find_all('div', {'class': 'all_cat_list'}) # 遍历提取a标签的信息,避免直接打印整个div的HTML for div in all_cat_list: links = div.find_all('a') for a in links: print(f"标题: {a.get_text(strip=True)}, 链接: {a['href']}, Title属性: {a.get('title', '无')}")
关键改动说明
- 移除手动设置的
req.encoding = 'cp1251',让requests根据响应头自动推断编码。 - 使用
req.content(原始字节流)代替req.text传递给BeautifulSoup,避免编码转换错误。 - 指定
lxml作为HTML解析器,解析效率和兼容性优于默认的html.parser。 - 遍历提取每个
a标签的文本、链接和title属性,输出更清晰的结构化信息,而非直接打印原始HTML。
内容的提问来源于stack exchange,提问作者Евгений Еремеев
相关产品推荐
相关产品推荐

