首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

Python的urllib抓取网页,该怎么解决

2013-01-04 
Python的urllib抓取网页一些网页可以用Python的urllib来抓取内容,基本上没有问题。但是有的网页内容在浏览

Python的urllib抓取网页
一些网页可以用Python的urllib来抓取内容,基本上没有问题。
但是有的网页内容在浏览器看到的和抓取的有很大区别,抓取的基本上是框架实质内容没有。
比如必应词典,http://dict.bing.com.cn/#good

在浏览器看到的是实际的解释内容,但是抓取到的内容根本没有解释.
想问一下这种非静态的内容如何抓取呢?

import urllib
url = "http://dict.bing.com.cn/#good"
page_src = urllib.urlopen(url.encode('utf-8')).read().decode("utf-8")



[解决办法]
可以利用浏览器的debug功能(例如firefox的firebug)来找到获取真正数据的request。然后在你的python程序中模拟它。

用你的例子http://dict.bing.com.cn/#good,打开firebug的net选项,可以看到浏览器为完成这个网页所作的所有请求,有一个是:http://dict.bing.com.cn/io.aspx,他是一个POST request,参数是q=good&t=dict&ut=default&ulang=ZH-CN&tlang=EN-US,得到的数据是:“{"ROOT":{"$INPUT":"good","$LANG":"en","INFS":{"INF":[{"$T":"cp","I-E":{"$":"better"},"$":""},{"$T":"sp","I-E":{"$":"best"},"$":""},{"$T":"cp","I-E":{"$":"better"},"$":""},{"$T":"sp","I-E":{"$":"best"},"$":""}],"$":""},"PROS":{"PRO":{"$L":"US","$":"ɡ?d"},"$":""},"COLLS":{"CS":[{"$REL":"adj.+n.","C":[{"$T1":"good","$T2":"job","$":""},{"$T1":"good","$T2":"thing","$":""},{"$T1":"good","$T2":"luck","$":""},{"$T1":"good","$T2":"health","$":""},{"$T1":"good","$T2":"quality","$":""}],"$":""},{"$REL":"adv.+v.","C":[{"$T1":"look","$T2":"good","$":""},{"$T1":"feel","$T2":"good","$":""}],"$":""}],"$":""},"SUGGS":{"PH":{"I":[{"$DEF":"货物; 商品; 动产; 本领; 不负所望的人",...”。
[解决办法]
这个问题分2种情况:
第一:用http拦截找到post 或get向服务器提交的数据,完全模拟post或get就可以。
第二:ajax返回的网页,只能上模拟浏览器的第三方库。
本问题回答来自sina微博 python爱好者 
python培训_python从零基础到网页采集和web开发培训http://www.qy7788.com.cn/shiyongxinxi/shiyongxinxi161.html
[解决办法]
你这个,传统叫法,叫做动态网页内容。
本质上,是需要你搞懂背后执行的逻辑,才能用代码模拟出来的。

关于逻辑和代码实现,这里都有,自己去看吧:
如何用Python,C#等语言去实现抓取静态网页+抓取动态网页+模拟登陆网站

热点排行