10行代码爬取网页

功能的可行性:从http协议到tcp协议,相信大家做过计算机网络的FTP大实验对protocol 这个术语有了更加深刻的了解了。所以我们只要遵循相应的协议,获取一个网页上的内容就是很容易的了, 所谓的DOS(denial-of-service)攻击也不过是这样么,我们如果有用户名和密码,他不让我们登录才不科学呢。知道了这点,突然心潮澎湃,只要他是个网页注定要对我们打开大门,但是能光能入门还不行,还得知道人家的规矩,不然人家还是会拒客的,就像到餐馆吃饭,他得让你进去,不让你进去就是侵犯人权,闹大了还的上美国法院或许都能得到天价赔偿,但是你如果在门口张牙舞爪,不符合规矩,保安叔叔还是会请您回避的~所以下面我们还得老老实实看如何遵循服务器的要求进行爬取网页。

首先, 如果这个网页不需要登录,把你的url拷贝到服务器上就能加载下来网页,那样就比较简单了。使用python 一句话:

  content = urllib2.urlopen(url).read()

content就是我们要访问的网页了。

如果需要登录呢?也很简单把表单填好就可以了。这次有些复杂,不过还是可以写成一句话:

urllib2.urlopen(urllib2.Request(url, urllib.urlencode(params))).read()

其中params是你要提交的表单数据。

哈哈,太简单了,赶紧启动个python gui去爬info.tsinghua.edu.cn吧, 忙碌一番发现,搞不定啊,进不去,哭泣。。。。。。。。。。。。

只见info大喝一声,info重地,岂容尔等小儿放肆!

遭遇当头一喝的我们赶紧检查我们的过程出现了什么问题?怎么才能登录info呢?还是看看我们通过浏览器登录的时候出现了都上缴了什么买路钱吧。

果然info还是留了一手,在你的提交表单中多了2项,x,y, x,y有什么用处,没发现,人就这么着了,你怎么滴吧。

ok,发现了这个小问题知道怎么搞了吧,把你的参数多加一项啊。改好之后,怀着忐忑的心情,应该是这样了吧,然后。。。唉,下载下来的不是你登录后的页面,还是登录之前的页面。

好吧,还有什么问题呢?Cookie。这是防止非法登录的另一个手段。这个问题好复杂啊,所以一句话搞不定了,好吧,牺牲一下,3句话搞定吧。

spider = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.LWPCookieJar()))
urllib2.install_opener(spider)
content = spider.open(urllib2.Request(url, params)).read()

获得了网页代码之后怎么解析网页呢?推荐一个利器中的利器——pyquery.使用python封装了一遍jquery的所有操作。好吧,我服了,写一个网页并解析一共用了不到10行代码。。。这真实我们程序猿的福音啊!

 

 

-----------------------------

Xu Wang

School of Software, Tsinghua.

Mobile:+8618810456160

Mails: xu-wang11@mails.tsinghua.edu.cn

 

 

 

 

posted @ 2013-11-23 17:48  Fruits  阅读(1228)  评论(1编辑  收藏  举报