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()

 

posted @ 2016-08-30 17:43  whzym111  阅读(439)  评论(0编辑  收藏  举报