首页 > 编程语言 > 详细

python库-urllib

时间:2016-01-29 20:44:17      阅读:310      评论:0      收藏:0      [点我收藏+]

  urllib库提供了一系列操作url的功能,是python处理爬虫的入门级工具,网上的学习资料也很多。我做爬虫是一开始就用了Scrapy框架,并不是一步步从urllib开始的,反而是在后来解决一些小问题的时候用到了urllib库,感觉用起来很简洁也很实用,下面是我最近的一些应用总结。

1、urllib和urllib2

  在python2.x的版本中有urllib和urllib2两个库,为什么这样我也没有好好去调研。两者能处理的问题有些相交,更多的是不同,在我的应用场景中,一个最重要的区别就是通过urllib2的方法可以修改header信息,而urllib不支持,后边的例子可以看到。

  在python3的版本中,已经没有urllib2了,版本2中的urllib和urllib2合并在了一起,urllib自然也就支持修改头部信息

  下面这两段代码是python2和python3的使用情况对比  

1 import urllib2
2 req=urllib2.Request(https://www.python.org/)
3 req.add_header(Range,bytes=0-20)
4 res=urllib2.urlopen(req)
5 data=res.read().decode(utf-8)
6 print data
1 python3:
2 from urllib import request
3 req=request.Request("https://www.python.org/") 
4 req.add_header(Range,bytes=0-20)
5 res=request.urlopen(req) 6 res.read().decode(utf-8)

2、应用urllib爬取页面信息的完整小案例(python2)

  我理解的整个爬虫的过程就是首先下载网页,然后对网页进行解析提取需要的数据,最后数据入库或者是文件等等。上面的代码已经将网页下载下来了,只不过由于修改了Range信息,所以只下载了网页的一部分。

  下面的例子就是如何解析网页,我之前关于Scrapy的博客用到了Xpath的方式,下面这个例子是用的正则,其实解析网页就没有urllib什么事了...

  豆瓣电影中排名前170名电影的得分之和:我用的urllib库,用urllib2也是可以的

import urllib
import re
ll=[]
for i in range(7):
     url=http://movie.douban.com/top250?start+str(i*25)
     req=urllib.urlopen(url)
     page=req.read()
     reg=<span class="rating_num" property="v:average">([0-9]+.[0-9]+)</span>
     regc=re.compile(reg)
     res=regc.findall(page)
     ll.extend(res)
sum=0
for i in range(170):
     sum+=float(ll[i])
print sum

3、应用urllib2发送get和post请求(python2)

 get和post最简单的理解就是,get是把请求信息附加到url里,而post则是通过表单

(1)查看请求参数——看url,可以从网址栏看,也可以通过开发者工具看

技术分享

  或者从,参数列表看:

技术分享  

(2)get方式----把参数附加到url即可

1 import urllib2
2 url=http://www.douban.com/search?source=suggest&q=123
3 req=urllib2.Request(url)

(3)post方式

1 import urllib
2 import urllib2
3 url="http://www.douban.com/search"
4 data={source:suggest,q:123}
5 data=urllib.urlencode(data)  # 编码成url的格式
6 req=urllib2.Request(url=url,data=data)

4、爬虫真的很好玩~~

  最后再说点有意思的,本人也是有喜欢的小明星哒,网上那么多的美图下也下不过来,肿么办呢?写个爬虫吧哈哈~前几天逛贴吧看美图突发奇想写个小爬虫,追星学习两不误呢~  

import re
import urllib

def getHtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

def getImg(html):
    reg = rsrc="(.+?\.jpg)" pic_ext
    imgre = re.compile(reg)
    imglist = imgre.findall(html)
    x = 0
    for imgurl in imglist:
        urllib.urlretrieve(imgurl,%s.jpg % x)
        x = x + 1        
   
html = getHtml("http://tieba.baidu.com/p/..........?pn=1") #改一下参数
getImg(html)

 

python库-urllib

原文:http://www.cnblogs.com/naonaoling/p/5169373.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!