赞
踩
简单来说一下,本文是使用了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 + '爬取完成')
以下为转换编码之后爬取成功的文件。注意:如果不转码,将会出现乱码的情况。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。