鱼C论坛

 找回密码
 立即注册
查看: 2250|回复: 3

[已解决]编码问题(中文乱码)爬虫报错,求大佬

[复制链接]
发表于 2022-4-22 00:44:49 | 显示全部楼层 |阅读模式
20鱼币
大佬们,我在自学bs4时遇到编码问题的报错求解决
#网站url:https://sanguo.5000yan.com/
#源码如下
import requests
from bs4 import BeautifulSoup

if __name__ =='__main__':
     url='https://sanguo.5000yan.com/'
     headers={ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'
           }
     req=requests.get(url=url,headers=headers).content#这里使用content是因为使用text会乱码
     soup=BeautifulSoup(req,'lxml')
     san_list=soup.select('.sidamingzhu-list-mulu li')
     fp=open('./sanguo.txt','w',encoding='utf-8')
     for li in san_list:
          title=li.a.string
          list_url=li.a['href']
          page_text=requests.get(url=list_url,headers=headers).content#这里不管是.content还是.text都是乱码
          soup1=BeautifulSoup(page_text,'lxml')
          result=soup.find('div','class_="grap"').text
          fp.write(title +':'+result + '\n')#运行是这里报错AttributeError: 'NoneType' object has no attribute 'text'
          print(title,'爬取成功!')
最佳答案
2022-4-22 00:44:50
Stevan 发表于 2022-4-22 12:53
#我搞懂了中文乱码的解决方法:requests.get().content.decode('utf-8')先转成二进制在转utf-8编码格式
# ...

import requests
from bs4 import BeautifulSoup

if __name__ =='__main__':
     url='https://sanguo.5000yan.com/'
     headers={ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'
           }
     req=requests.get(url=url,headers=headers).content#这里使用content是因为使用text会乱码
     soup=BeautifulSoup(req,'lxml')
     san_list=soup.select('.sidamingzhu-list-mulu li')
     fp=open('./sanguo.txt','w',encoding='utf-8')
     for li in san_list:
          title=li.a.string
          list_url=li.a['href']
          resp=requests.get(url=list_url,headers=headers)
          resp.encoding = 'utf-8'                        # 指定编码为 'utf-8'
          soup1=BeautifulSoup(resp.text,'lxml')
          result=soup1.find('div',class_="grap").text
          fp.write(title +':'+result + '\n')
          print(title,'爬取成功!')

最佳答案

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-22 00:44:50 | 显示全部楼层    本楼为最佳答案   
Stevan 发表于 2022-4-22 12:53
#我搞懂了中文乱码的解决方法:requests.get().content.decode('utf-8')先转成二进制在转utf-8编码格式
# ...

import requests
from bs4 import BeautifulSoup

if __name__ =='__main__':
     url='https://sanguo.5000yan.com/'
     headers={ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'
           }
     req=requests.get(url=url,headers=headers).content#这里使用content是因为使用text会乱码
     soup=BeautifulSoup(req,'lxml')
     san_list=soup.select('.sidamingzhu-list-mulu li')
     fp=open('./sanguo.txt','w',encoding='utf-8')
     for li in san_list:
          title=li.a.string
          list_url=li.a['href']
          resp=requests.get(url=list_url,headers=headers)
          resp.encoding = 'utf-8'                        # 指定编码为 'utf-8'
          soup1=BeautifulSoup(resp.text,'lxml')
          result=soup1.find('div',class_="grap").text
          fp.write(title +':'+result + '\n')
          print(title,'爬取成功!')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-4-22 12:53:11 | 显示全部楼层
#我搞懂了中文乱码的解决方法:requests.get().content.decode('utf-8')先转成二进制在转utf-8编码格式
#源码
import requests
from bs4 import BeautifulSoup

if __name__ =='__main__':
     url='https://sanguo.5000yan.com/'
     headers={ 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'
           }
     req=requests.get(url=url,headers=headers).content
     soup=BeautifulSoup(req,'lxml')
     san_list=soup.select('.sidamingzhu-list-mulu li')
     fp=open('./sanguo.txt','w',encoding='utf-8')
     for li in san_list:
          title=li.a.string
          list_url=li.a['href']
          page_text=requests.get(url=list_url,headers=headers).content.decode('utf-8')
          soup1=BeautifulSoup(page_text,'lxml')
          result=soup1.find('div',class_='grap')
          result1=result.text
          #print(result1)
         
          fp.write(title +':'+result1 + '\n')
          print(title,'爬取成功!')
   #附上运行结果,找了俩小时的文献
#希望我的问题案例,对各位有类似问题的帮助
FS~6A$KH3AW92}0ZV`1MW6V.png
TQX(7K$@FBOVF@2H_N_AN.png
U8C~V[UUN``6DB{4J2CLK6H.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-23 15:04:54 | 显示全部楼层
啊这。。。requests模块可以帮你编码!
import requests

url = 'https://sanguo.5000yan.com/'
headers = { 'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.88 Safari/537.36'}
res = requests.get(url=url,headers=headers)
print(res.text[200:400]) # 目的是为了能打印出来(乱码)
res.encoding = "utf-8" # 转码
print(res.text[200:400]) # 正常
还有,以后发代码要用代码功能([code]标签),要不然会被人骂的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表