鱼C论坛

 找回密码
 立即注册
查看: 2296|回复: 3

[技术交流] 056轮一只爬虫的自我修养4:OOXX

[复制链接]
发表于 2017-9-4 20:55:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
全部自己手打的~
觉得喜欢的话关注哟,礼物送一波~~
不要做伸手党哦!
大家继续努力~


  1. import urllib.request
  2. import os
  3. #import random

  4. def url_open(url):       #模块化方便后面调用
  5.     req = urllib.request.Request(url) #便于添加文件头
  6.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
  7. #User-Agent是检查人类和代码的关键
  8.     '''
  9.     proxies = []
  10.     proxy = random.choice(proxies)
  11.     proxy_support = urllib.request.Proxyhandler
  12.     opener = urllib.request.build_opener(proxy_support)
  13.     proxy_opener = urllib.request.build_opener(proxy_support)
  14.     urllib.request.install_opener(opener)
  15.     '''
  16. #使用代理下载的图片都不是美眉
  17.    
  18.     response = urllib.request.urlopen(url)
  19.     html = response.read()    #这边不解码成utf-8,保存图片是二进制,utf-8是人看的


  20. #打开网页的时候404,所以测试一下
  21.     #print(url)
  22.     #print(html)
  23.     return html

  24.    
  25. def get_page(url):    #获取页码数
  26.     html = url_open(url).decode('utf-8')
  27.     a = html.find('current-comment-page') + 23  #偏移距离,正好到数字的位置

  28.     b= html.find(']',a)   #】有很多,起始位置是a开始

  29.     return (html[a:b])     #从a到b的位数区间,就是页码数
  30.    
  31. def find_imgs(url):   #找到图片的下载地址
  32.     html = url_open(url).decode('utf-8')
  33.     img_addrs = [] #列表

  34.     a = html.find('img src=')

  35.     while a != -1:   #找得到a的话
  36.         b=html.find('.jpg',a,a+255)  #找不到会返回值-1,-1就是找不到
  37. #找到的关键字,从哪里开始,字符长度多长
  38.         if b != -1:           #如果找到b了。就加入到下载地址
  39.             img_addrs.append('http:' + html[a+9:b+4])  #网页的开头和结束 #并且缺了http:
  40.         else:
  41.             b = a + 9       #找不到b的话,b的地址也要改变
  42.         a = html.find('img src=',b)     #a每次都会改变,下一张图片

  43.    
  44.     #for each in img_addrs:   #打印出网址
  45.         #print(each)
  46.     return img_addrs


  47. def  save_imgs(folder,img_addrs):
  48.     for each in img_addrs:
  49.         filename = each.split('/')[-1]   #按斜杠分割,分成若干列表,-1就是最后一个斜杠的列表
  50.         with open(filename,'wb') as f:
  51.             img = url_open(each)   #url_open就是二进制read(),每个图片下载地址的二进制
  52.             f.write(img)    #写入二进制保存成图片

  53. def download_mm(folder='ooxx',pages=10):    #主函数
  54.     os.mkdir(folder)    #创建文件夹
  55.     os.chdir(folder)    #操作文件夹,工作目录。保存的位置

  56.     url = 'http://jandan.net/ooxx'  
  57.     page_num = int(get_page(url))      #取到最新页码,用模块的思想,调用函数

  58.     for i in range(pages):        #i从pege到最新页
  59.         page_num -= i      #从最新到第一页
  60.         page_url = url + '/page-' +str(page_num) + '#comments'
  61. #每一页的网址
  62.         img_addrs = find_imgs(page_url)   #每一页里面去找图片地址,模块化思想,调用函数
  63.         save_imgs(folder,img_addrs)      #保存图片到文件夹,模块化思想


  64. if __name__ == '__main__':   #如果在主程序里调用 name = main。如果在主函数调用的意思
  65.     download_mm()

  66.         
  67.    
  68.    
  69.    
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-9-4 21:03:23 | 显示全部楼层
I:\B学习\Python全套教程\练习作业\ooxx\5dbc315dly1fj6nh6w8iuj20hs0gymy6.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-4 21:04:05 | 显示全部楼层
file:///I:/B学习/Python全套教程/练习作业/ooxx/5dbc315dly1fj6nh6w8iuj20hs0gymy6.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-4 22:21:24 | 显示全部楼层
66
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-8 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表