fiddpython 抓取乱码全部是乱码,怎么回事

注:转载自
我们经常通过python做采集网页数据的时候,会碰到一些乱码问题,今天给大家分享一个解决网页乱码,尤其是中文网页的通用方法。
首页我们需要安装chardet模块,这个可以通过easy_install 或者pip来安装。
安装完以后我们在控制台上导入模块,如果正常就可以。
比如我们遇到的一些ISO-8859-2也是可以通过下面的方法解决的。
直接上代码吧:
import&urllib2import&sysimport&chardetreq&=&urllib2.Request("/")##这里可以换成,content&=&urllib2.urlopen(req).read()typeEncode&=&sys.getfilesystemencoding()##系统默认编码infoencode&=&chardet.detect(content).get('encoding','utf-8')##通过第3方模块来自动提取网页的编码html&=&content.decode(infoencode,'ignore').encode(typeEncode)##先转换成unicode编码,然后转换系统编码输出print&html
&通过上面的代码,相信能够解决你采集乱码的问题。
接着开始学习网络爬虫的深入点儿的东东:
以抓取韩寒博客文章目录来加以说明:,下面是截图
我用的是Chrome浏览器(firefox也行),打开上述网页,鼠标右击,选择审查元素,就会出现下面所示
首先我们来实现抓取第一篇文章&一次告别&的page的url
按住ctrl+f就会在上图左下角打开搜索栏,输入&一次告别&,就会自动定位到html源码所在位置,如上高亮显示的地方
接下来我们就是要把对应的url:.cn/s/blog_2ek51.html提取出来
详细实现代码如下:
1 #coding:utf-8
2 import urllib
3 str0 = '&a title="一次告别" target="_blank" href=".cn/s/blog_2ek51.html"&一次告别&/a&'
4 title = str0.find(r'&a title')
5 print title
6 href = str0.find(r'href=')
7 print href
8 html = str0.find(r'.html')
9 print html
10 url = str0[href + 6:html + 5]
11 print url
12 content = urllib.urlopen(url).read()
13 #print content
14 filename = url[-26:]
15 print filename
16 open(filename, 'w').write(content)
catchBlog.py
下面对代码进行解释:
&首先利用find函数开始依次匹配查找'&a title','href=','.html',这样就可以找到关键字符所在的索引位置,然后就可以定位到.cn/s/blog_2ek51.html的位置[href+6:html+5]最后利用urllib的相关函数打开并读取网页内容,写到content中
运行程序:
04093.cn/s/blog_2ek51.htmlblog_2ek51.html
于是在代码所在目录生成html文件blog_2ek51.html
至此便抓取到第一篇文章的url及网页内容;上述操作主要学习了以下几个内容:1.分析博客文章列表特征2.提取字符串中的网络连接地址3.下载博文到本地
接下来继续深入:获取博文目录第一页所有文章的链接并将所有文章下载下来
1 #coding:utf-8
2 import urllib
3 import time
4 url = ['']*50
5 con = urllib.urlopen('.cn/s/articlelist__0_1.html').read()
7 title = con.find(r'&a title=')
8 href = con.find(r'href=', title)
9 html = con.find(r'.html', href)
11 while title != -1 and href != -1 and html != -1 and i & 50:
url[i] = con[href+6:html+5]
print url[i]
title = con.find(r'&a title=', html)
href = con.find(r'href=', title)
html = con.find(r'.html', href)
print "Find end!"
21 while j & 50:
content = urllib.urlopen(url[j]).read()
open(r'hanhan/' + url[j][-26:], 'w+').write(content)
print 'downloading', url[j]
time.sleep(15)
print 'Download article finish!'
29 #print 'con', con
catchBlog1.py
阅读(...) 评论()如下图所示出现此种状况,加上phantom.outputEncoding=&GBK&;即可解决
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:388次
排名:千里之外如何解决远程页面抓取中的乱码问题-php-电脑编程网如何解决远程页面抓取中的乱码问题作者:dxy
 和相关&&
由于平时使用的网页文件基本上都是gb2312编码方式,如果通过xmlhttp控件读取的话,肯定会出现乱码问题,但是要把所有文件都改成utf-8编码,操作上比较麻烦。经过反复比较,我找到了相对实用的解决方法。 ff提供了overrideMimeType方法,可以指定返回值的编码,所以解决起来比较简单,只要把这个方法指向gb2312就可以了。对于IE,可以用s配合来作编码转换,用gb2utf8来转换接收到的二进制数据,其中利用到execScript方法来调用s的函数。复制代码 代码如下:&body&&/body& &script& loadPage("index.htm") function loadPage(url){ var xh=window.Event?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP") xh.open("GET",url,true) if(window.Event) xh.overrideMimeType("text/charset=gb2312") xh.onreadystatechange=function(){ if(xh.readyState!=4) return var v v=window.Event?xh.responseText:window.gb2utf8(xh.responseBody) alert(v) } window.gb2utf8=function(data){ var glbEncode=[],t,i,j,len gb2utf8_data=data execScript("gb2utf8_data = MidB(gb2utf8_data, 1)+' '", "vbscript") t=escape(gb2utf8_data).replace(/%u/g,"").replace(/(.{2})(.{2})/g,"%$2%$1").replace(/%([A-Z].)%(.{2})/g,"@$1$2") t=t.split("@") i=0 len=t.length while(++i&len){ j=t[i].substring(0,4) if(!glbEncode[j]) { gb2utf8_char = eval("0x"+j) execScript("gb2utf8_char=Chr(gb2utf8_char)","vbscript") glbEncode[j]=escape(gb2utf8_char).substring(1,6) } t[i]=glbEncode[j]+t[i].substring(4) } gb2utf8_data=gb2utf8_char=null return unescape(t.join("%")).slice(0,-1) } xh.send(null) } &/script&
相关资料:|||||||如何解决远程页面抓取中的乱码问题来源网络,如有侵权请告知,即处理!编程Tags:                &                    pyspider抓取网页显示乱码? - 开源中国社区
当前访客身份:游客 [
当前位置:
环境:windows 7 64
python: 2.7.2 &32bit
一些插件的版本 lxml 3.6.0 &
pyspider 0.3.8
使用localhost:5000 测试一段代码显示成乱码,求解!
python组件截图:
共有0个答案
更多开发者职位上
有什么技术问题吗?
Mario_Q...的其它问题
类似的话题

我要回帖

更多关于 python抓取网页乱码 的文章

 

随机推荐