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