|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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页。
|
|