今天来说下昨天有人反映部分网站的编码问题。
简单来说一下,本文是使用了chrome浏览器的xpath插件,比正则表达式简单。需要的联系本人。
本文爬取的小说编码格式为ISO8859-1,所以要进行转码。
utf-8编码可以用gbk和iso8859-1解码后编回去
gbk编码后只能用iso8859-1解码后编回去。
由于拿到的数据需要放在list里循环遍历,所以在遍历之后需要将对象强制转换为str,才能把编码转换为gbk,最后在存文件的时候以utf-8存入。
from lxml import etree
import requests
import os
import time
#设置要爬取的url地址
url = '写上你要爬取的网站'
#设置头部信息
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/76.0.3809.87 Safari/537.36'}
#请求页面数据
repson = requests.get(url,headers=headers)
#获取html页面
wenben_text = repson.text
#把获取的页面放到xpath里面,用来调用xpath方法
etrees = etree.HTML(wenben_text)
#获取每一章的路由
wenben_list = etrees.xpath('xpath匹配标签内容')
file_xpath = "设置存放文件的路径"
if not os.path.exists(file_xpath):
os.mkdir(file_xpath)
#获取页面具体内容
def get_content(url):
#请求页面数据
repson = requests.get(url=url,headers=headers)
#获取页面数据
wenben_text = repson.text
uft_str = wenben_text.encode("iso-8859-1").decode('gbk')
etrees = etree.HTML(uft_str)
#小说内容
content = etrees.xpath('xpath匹配标签内容')
content = ''.join(content)
return content
n=0
for i in wenben_list:
n+=1
#标题
title = i.xpath('xpath匹配标签内容')[n]
#内容
nr_url = i.xpath('xpath匹配标签内容')[n]
#这里必须强制转换title为str,因为list不能转换编码
en = str(title)
#这里将编码转换为gbk,最后存文件的时候再以utf-8存入就可以。
uft8_str = en.encode("iso-8859-1").decode('gbk')
content = get_content(nr_url)
print(uft8_str+'开始爬取')
with open(file_xpath + uft8_str + ".txt", 'w',encoding='utf-8') as f:
f.write(uft8_str+'\n\n\n'+content)
print(uft8_str + '爬取完成')
以下为转换编码之后爬取成功的文件。注意:如果不转码,将会出现乱码的情况。