美文网首页
3.从百度贴吧爬取图片

3.从百度贴吧爬取图片

作者: 一口猫饼 | 来源:发表于2017-11-18 10:07 被阅读0次

    前几天试了一下从百度贴吧爬取图片。
    先贴上一段简陋的代码:

    import re
    import urllib.request
    from urllib import request
    
    def gethtml(url):
        
        head={
            
            "User-Agent": "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36"
           
    
    
            }
        req=request.Request(url,headers=head)
        response=request.urlopen(req)
        html=response.read()
        html=html.decode('utf-8')
        return html
    
    def getimg(html):
    
        imgre=re.compile('<img pic_type="0" class="BDE_Image" src="(.*?)"')
        imglist=re.findall(imgre,html)
        x=0
        for imgurl in imglist:
            try:
                
                urllib.request.urlretrieve(imgurl,'%s.jpg'%x)
                print("Success to download")
                x+=1
            except:
                print("Fail")
    
                
        return imglist
    
    html=gethtml("http://tieba.baidu.com/p/2460150866")
    
    getimg(html)
    
    
    

    先看第一个函数getheml,这段代码看起来并不陌生,与之前那个爬取网页信息的爬虫代码十分类似,唯一不同的是多了个User Agent这个东西。下面来简单地讲讲它。之所以设置User Agent是因为有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的身份。此时,我们就可以通过设置User Agent的来达到隐藏身份的目的,User Agent的中文名为用户代理,简称UA。

    User Agent存放于Headers中,服务器就是通过查看Headers中的User Agent来判断是谁在访问。在Python中,如果不设置User Agent,程序将使用默认的参数,那么这个User Agent就会有Python的字样,如果服务器检查User Agent,那么没有设置User Agent的Python程序将无法正常访问网站。

    贴一些网上找来的常用User Agent:
    1.Android
    Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
    Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
    Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
    2.Firefox
    Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
    Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0
    3.Google Chrome
    Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
    Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19
    4.iOS
    Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
    Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3

    再来说说UA的设置方法:
    1.在创建Request对象的时候,填入headers参数(包含User Agent信息),这个headers参数要求为字典。

    2.在创建Request对象的时候不添加headers参数,在创建完成之后,使用add_header()的方法,添加headers。

    具体操作在这里:http://blog.csdn.net/c406495762/article/details/60137956

    这时可以注意到获取网页信息就必须创建Request对象了,因为需要改变header参数。

    好我们已经获取了网页的所有信息,而所需要的图片数据也隐藏其中,第二个函数getimg可以帮助我们筛选出来并保存。

    正则表达式可以让我们按自己所想地去筛选需要的数据。具体讲解在这里:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193331387014ccd1040c814dee8b2164bb4f064cff000

    image.png

    re.compile() 可以把正则表达式编译成一个正则表达式对象.
    re.findall() 方法读取html 中包含 imgre(正则表达式)的数据。
    于是我们将得到整个页面中包含图片的URL地址。
    urllib.urlretrieve()方法,直接将远程数据下载到本地。
    通过一个for循环对获取的图片连接进行遍历,为了使图片的文件名看上去更规范,对其进行重命名,命名规则通过x变量加1。保存的位置默认为程序的存放目录。
    程序运行完成,将在目录下看到下载到本地的文件。

    当然功能还是非常简陋的,可以再加入去重或下载到指定文件夹的功能:
    http://blog.csdn.net/hurmishine/article/details/52749410

    相关文章

      网友评论

          本文标题:3.从百度贴吧爬取图片

          本文链接:https://www.haomeiwen.com/subject/ghqevxtx.html