最近在学爬虫爬小说,遇到个网页里面有一个乱码。它网页是gb2312编码,我用gb2312、gbk、utf-8都试了一遍识别不了。因为我是在整页整页的爬文字,一报错就是一章内容没下,就很难受。
想问问大家,有没有办法直接不管那个无法编码的字符,直接将提取的内容写入?
下载代码如下
#下载
async def download(url, name):
async with semaphore:
async with aiohttp.ClientSession() as session:
async with session.get(url) as reques:
reques.encoding = 'gbk'
page = bs4.BeautifulSoup(await reques.text(), 'html.parser')
div = page.find('div', class_="read_chapterDetail")
p = div.find_all('p')
# 打开文件,打开方式,数据为二进制
with open(f'{name}.txt', mode='wb') as f:
for i in p:
text = i.text + '\n'
f.write(text.encode('utf-8'))
print(f'{name}下载完成!')
可以啊,你不指定就是了呀,只是可能你保存的小说是乱码的
换个网站不就好了
你先用字节流读取,这之后把字节流分割成一个字符一个字符,再用循环调用解码函数,解不了就用固定字符代替。不就好了吗
我找到更好的解决办法了,这篇文章里面讲了怎么跳过不能编码的文件http://t.csdn.cn/JHPs1
我发现文件报错不只是编码不了的问题,还有编码错误的问题。这篇文章里面讲了怎么解决https://blog.csdn.net/mrbone11/article/details/120795683