|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 麻麦皮 于 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[1],197的9为list1[9],197的7为list2[7],那么页数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[a: b]) #测试用
- return html[a: b]
- 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[a + 9: b + 4]) #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[page_num//100%10%4]) + str(list1[page_num//10%10]) + str(list2[page_num%10]) + '#comments' #取百位数字+取十位数字+取个位数字
- img_addrs = find_imgs(page_url)
- save_imgs(folder, img_addrs)
复制代码
运行起来,输入download(),默认爬取最新页数往前的10页。
输入download(start=50,pages=3),爬取50、49、48页。
|
|