2016-12-23 75 views
0

我学会了如何从https://automatetheboringstuff.com中删除网站。我想取消其中内容为中文的http://www.piaotian.net/html/3/3028/1473227.html,并将其内容写入.txt文件。但是,.txt文件包含随机符号,我认为这是一个编码/解码问题。拼音汉字python

我读过这个主题“how to decode and encode web page with python?”,并认为我的网站的编码方法是“gb2312”和“windows-1252”。我试图用这两种编码方法解码,但失败了。

有人可以向我解释我的代码问题吗?我对编程非常陌生,所以请让我知道我的错误观念!

此外,当我从代码中删除“html.parser”时,.txt文件变成空的,而不是至少有符号。为什么会这样?

import bs4, requests, sys 

reload(sys) 
sys.setdefaultencoding("utf-8") 

novel = requests.get("http://www.piaotian.net/html/3/3028/1473227.html") 
novel.raise_for_status() 

novelSoup = bs4.BeautifulSoup(novel.text, "html.parser") 

content = novelSoup.select("br") 

novelFile = open("novel.txt", "w") 
for i in range(len(content)): 
    novelFile.write(str(content[i].getText())) 
+0

您只需要在网站上找到正确的编码并应用即可。这里是关于agenty的详细教程 - https://www.agenty.com/doc/hosted-app/248/scraping-chinese-or-japanese-websites –

回答

1
novel = requests.get("http://www.piaotian.net/html/3/3028/1473227.html") 
novel.raise_for_status() 
novel.encoding = "GBK" 
novelSoup = bs4.BeautifulSoup(novel.text, "html.parser") 

出来:

<br> 
    一元宗,坐落在青峰山上,绵延极长,现在是盛夏时节,天空之中,太阳慢慢落了下去,夕阳将影子拉的很长。<br/> 
<br/> 
    一片不是很大的小湖泊边上,一个约莫着十七八岁的青衣少年坐在湖边,抓起湖边的一块石头扔出,顿时在湖边打出几朵浪花。<br/> 
<br/> 
    叶希文有些茫然,他没想到,他居然穿越了,原本叶希文只是二十一世纪的地球上一个普通的大学生罢了,一个月了,他才后知后觉的反应过来,这不是有人和他进行恶作剧,而是,他真的穿越了。<br/> 

请求将自动解码来自服务器的内容。大多数 unicode charsets被无缝解码。

当您提出请求时,请求会根据HTTP标头对响应的 编码进行有根据的猜测。当您访问r.text时,使用Requests猜测的文本编码 。你可以找出使用 什么编码的要求,并改变它,使用r.encoding 属性:

>>> r.encoding 
'utf-8' 
>>> r.encoding = 'ISO-8859-1' 

如果更改编码,请求将每当调用使用 r.encoding的新价值r.text。

+0

感谢您的工作代码!你怎么知道如何使用“GBK”?如果我使用这个'text = text.decode(“GBK”)。encode(“utf-8”)'为什么它不起作用? – idkla

+0

'GBK','gb2312'或'utf-8',请尝试,在大多数情况下,它会起作用。在使用.text之前先执行编码部分。 –

+0

好的非常感谢你! – idkla