麻麦皮 发表于 2020-4-16 03:48:17

爬虫煎蛋的无聊图

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

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

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

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

def url_open(url):
    req = urllib.request.Request(url)
    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')

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

    #print(html)    #测试用

    return html

def get_page(url):
    html = url_open(url).decode('utf-8')
   
    a = html.find('current-comment-page')+23
    b = html.find(']', a)
   
    #print(html)   #测试用

    return html

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

    a = html.find('img src=')
    while a != -1:
      b = html.find('.jpg', a, a+255)
      if b != -1:
            img_addrs.append('http:' + html)        #Chrome会屏蔽http,自己加上
      else:
            b = a + 9
      a = html.find('img src=', b)

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

    return img_addrs

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

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

    if start<pages:
      return '错误,爬取页数太多'
    elif start>0:
      page_num = int(start)
    else:
      page_num = int(get_page(url))

    for i in range(pages):
      page_num -= i
      page_url = url+'MjAyMDA0MTUtM' + str(list0) + str(list1) + str(list2) + '#comments'        #取百位数字+取十位数字+取个位数字
      img_addrs = find_imgs(page_url)
      save_imgs(folder, img_addrs)

运行起来,输入download(),默认爬取最新页数往前的10页。
输入download(start=50,pages=3),爬取50、49、48页。

将军床上请 发表于 2020-4-16 12:40:11

厉害 谢谢!
页: [1]
查看完整版本: 爬虫煎蛋的无聊图