抓取小说网页,链接在代码中。数据处理为字典,写入txt文件中。不知道怎么处理编码问题,中文不能正确显示,折腾了整个晚上,还是不行,要死。
还有一个问题就是网页源代码中在<p>标签中经常插入<u>----</u>标签,搞到有些字抓取之后看不见,也求一并解答。
刚学python,望大神指点。首先感谢你宝贵的时间,谢谢。
# coding:utf-8
from lxml import etree
from multiprocessing.dummy import Pool as ThreadPool
import requests
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
def towrite(contentdict):
f.writelines(u'章:' + unicode(contentdict['title']) + '\n')
f.writelines(unicode(contentdict['content']) + '\n\n')
def spider(url):
head = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
html = requests.get(url,headers = head)
html.encoding = 'utf-8'
print html.text
seletor = etree.HTML(html.text)
title = seletor.xpath('//p[@id="f_title1"]/h1/text()')
content = seletor.xpath('//p[@id="f_content1"]/p/p/text()')
fullcontent = ''
for each in content:
fullcontent += each
# title.decode('gb2312').encode('utf-8')
# fullcontent.encode('utf-8')
item = {}
item['title'] = title
item['content'] = fullcontent
towrite(item)
if __name__ == '__main__':
pool = ThreadPool(4)
f = open('guduliujiang.txt','a')
page = []
for i in range(1,29):
newpage = 'http://www.sbkk8.cn/mingzhu/zhongguoxiandaiwenxuemingzhu/guduliujiang/' + str(145232-i) + '.html'
page.append(newpage)
results = pool.map(spider,page)
pool.close()
pool.join()
f.close()
L'encodage du code source de la page Web est gb2312, pas utf-8
les requêtes sont utilisées avec BeautifulSoup
Question 1 :
L'utilisation de print html.encoding montre que le format d'encodage est ISO-8859-1
print html.text.decode('ISO-8859-1') n'a aucun effet
Référez-vous à ce qui suit Le code peut imprimer des caractères chinois dans le terminal
Question 2 :
Prenez la page Web de votre roman (Solitude de l'amour (2)) comme exemple
Essayez de voir si c'est le résultat que vous souhaitez
Voici mon code de test utilisant votre code :