zoukankan      html  css  js  c++  java
  • python基础学习1-第一个网络爬虫程序

    #!/usr/bin/env python
    # -*- coding:utf-8 -*- 煎蛋网抓妹子图
    import urllib.request
    import  os
    import random
    
    def url_open(url): #定义打开网络连接函数
        req = urllib.request.Request(url)#创建Request对象
        #给Request对象添加伪装头文件
        req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36')
        #定义个代理IP列表 用于随机选择代理IP
        iplist=['218.240.53.54:81','123.7.78.157:9999','112.95.105.26:9999','61.174.10.22:8080','115.52.204.30:9999']
        #创建代理对象
        proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})
        opener = urllib.request.build_opener(proxy_support)
        #设置代理对象伪装头文件
        opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36")]
        #安装代理文件
        urllib.request.install_opener(opener)
        #打开对应URL
        respons = urllib.request.urlopen(url)
        #接收对应URL的html代码
        html = respons.read()
        return  html
    
    def get_page(url):#定义查找图片页面函数
        html=url_open(url)#打开URL页面或的html代码
        html=html.decode('utf-8')#用utf-8反编码
    
        a=html.find('current-comment-page')+23#查找html代码中current-comment-page标志+23偏移量 得到图片页码 <span class="current-comment-page">[2110]</span>其中的2110
        b=html.find(']',a) #定义结束位置
        return (html[a:b])#返回取得的页码
    
    def find_img(url):
       html= url_open(url).decode('utf-8')#打开URL文件 把返回的html文件utf-8反编译
       img_addrs=[]#定义图片地址列表
       a=html.find('img src=')#在html文件中查找所有img src开头的 图片文件
       while a!=-1: #a=-1时表示find完毕
           b=html.find('.jpg',a,a+255)#查询到 img_src开头 和.jpg结尾的
           if b != -1:
              img_addrs.append(html[a+9:b+4])#查询到满足条件的html代码信息 就保存在图片列表中
           else:
              b=a+9
           a=html.find('img src=',b)
       return img_addrs
    
    
    def save_imgs(folder,img_adds):
        for each in img_adds:
            filename = each.split('/')[-1]
            with open(filename,'wb') as f:
                img=url_open(each)
                f.write(img)
    
    def down_mm(folder='downloadimg',pages=10):
        os.mkdir(folder)#新建文件夹
        os.chdir(folder)#切换到当前文件夹
    
        url="http://jandan.net/ooxx/"
        page_num=int(get_page(url))#取得开始页面号
        print(str(page_num))
        for i in range(pages):#依次页面号递减 返回前10页的图片
            page_num -=i
            page_url=url+'page-'+str(page_num)+'#comments'#拼出页面URL+图片页面号 http://jandan.net/ooxx/page-2110#comments
            img_adds= find_img(page_url)#查找出当前打开页面的所有图片路径和文件名称信息保存在列表中
            save_imgs(folder,img_adds)#根据列表中保存的文件路径和名称 通过网络下载图片到指定文件夹下面
    
    
    
    down_mm()
    
  • 相关阅读:
    HTML页面跳转的5种方法
    利用jquery来进行表单的多向提交
    HTML设置超链接字体颜色和点击后的字体颜色
    bootstrap精简教程
    类型的转换的神秘
    [转载] mysql 索引中的USING BTREE 的意义
    [转载]WeeksInAYear、WeeksInYear、DaysInAYear、DaysInAMonth、DaysInYear、DaysInMonth
    范围内取随机数
    [转载]asp.net中,<%#%>,<%=%>和<%%>分别是什么意思,有什么区别
    [转载]localStorage使用总结
  • 原文地址:https://www.cnblogs.com/whzym111/p/5822938.html
Copyright © 2011-2022 走看看