zoukankan      html  css  js  c++  java
  • python库-urllib

      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 = r'src="(.+?.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)
  • 相关阅读:
    并行编译 Xoreax IncrediBuild
    FreeImage使用
    wxWidgets简单的多线程
    wx菜单栏
    #你好Unity3D#Hierarchy视图监听gameObject点击事件
    #你好Unity3D#Project脚本执行双击资源操作
    Unity3D研究院编辑器之Editor的GUI的事件拦截
    Unity3D研究院编辑器之脚本设置ToolBar
    Unity3D研究院编辑器之不影响原有布局拓展Inspector
    Unity3D研究院之Editor下监听Transform变化
  • 原文地址:https://www.cnblogs.com/naonaoling/p/5169373.html
Copyright © 2011-2022 走看看