鱼C论坛

 找回密码
 立即注册
查看: 1142|回复: 1

[作品展示] 爬虫煎蛋的无聊图

[复制链接]
发表于 2020-4-16 03:48:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 麻麦皮 于 2020-4-24 21:49 编辑

学习了小甲鱼爬虫OOXX,由于年代久远,爬取煎蛋有一定的变化。不过煎蛋的妹子图被和谐了,变成了随手拍,那么我就随便爬取隔壁的无聊图吧。
提供给看视频看到爬虫篇想爬煎蛋的同学。
暴力观察煎蛋图网址,发现页数和网址的变化有以下规律
  1. #煎蛋网无聊图网址:'http://jandan.net/pic/MjAyMDA0MTUtM'+list0+list1+list2+'#comments'
  2. list0 = ['D', 'T', 'j', 'z']
  3. list1 = ['A', 'E', 'I', 'M', 'Q', 'U', 'Y', 'c', 'g', 'k']
  4. list2 = ['w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5']
  5. #例如页数为197,那么197的1为list0[1],197的9为list1[9],197的7为list2[7],那么页数197的网址为http://jandan.net/pic/MjAyMDA0MTUtMTk3#comments
复制代码

新用户上传不了图片...
既然如此,那么就动手吧
  1. import urllib.request
  2. import os

  3. list0 = ['D', 'T', 'j', 'z']
  4. list1 = ['A', 'E', 'I', 'M', 'Q', 'U', 'Y', 'c', 'g', 'k']
  5. list2 = ['w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5']

  6. def url_open(url):
  7.     req = urllib.request.Request(url)
  8.     req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36')

  9.     response = urllib.request.urlopen(req)
  10.     html = response.read()

  11.     #print(html)    #测试用

  12.     return html

  13. def get_page(url):
  14.     html = url_open(url).decode('utf-8')
  15.    
  16.     a = html.find('current-comment-page')+23
  17.     b = html.find(']', a)
  18.    
  19.     #print(html[a: b])   #测试用

  20.     return html[a: b]

  21. def find_imgs(url):
  22.     html = url_open(url).decode('utf-8')
  23.     img_addrs = []

  24.     a = html.find('img src=')
  25.     while a != -1:
  26.         b = html.find('.jpg', a, a+255)
  27.         if b != -1:
  28.             img_addrs.append('http:' + html[a + 9: b + 4])        #Chrome会屏蔽http,自己加上
  29.         else:
  30.             b = a + 9
  31.         a = html.find('img src=', b)

  32.     #for each in img_addrs: #测试用
  33.         #print(each)

  34.     return img_addrs

  35. def save_imgs(folder, img_addrs):
  36.     for each in img_addrs:
  37.         filename = each.split('/')[-1]
  38.         with open(filename, 'wb') as f:
  39.             img = url_open(each)
  40.             f.write(img)

  41. def download(folder = 'pic', start = 0, pages = 10):    #新增功能开始爬的页数,注意爬取顺序是从后往前爬
  42.     os.mkdir(folder)
  43.     os.chdir(folder)
  44.    
  45.     url='http://jandan.net/pic/'

  46.     if start<pages:
  47.         return '错误,爬取页数太多'
  48.     elif start>0:
  49.         page_num = int(start)
  50.     else:
  51.         page_num = int(get_page(url))

  52.     for i in range(pages):
  53.         page_num -= i
  54.         page_url = url+'MjAyMDA0MTUtM' + str(list0[page_num//100%10%4]) + str(list1[page_num//10%10]) + str(list2[page_num%10]) + '#comments'        #取百位数字+取十位数字+取个位数字
  55.         img_addrs = find_imgs(page_url)
  56.         save_imgs(folder, img_addrs)
复制代码

运行起来,输入download(),默认爬取最新页数往前的10页。
输入download(start=50,pages=3),爬取50、49、48页。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-16 12:40:11 | 显示全部楼层
厉害 谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-16 09:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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