鱼C论坛

 找回密码
 立即注册
查看: 2391|回复: 10

[已解决]煎蛋网的妹子图爬不了了

[复制链接]
发表于 2020-1-7 17:06:06 | 显示全部楼层 |阅读模式
3鱼币
我上次用了小甲鱼的爬取煎蛋网妹子图的代码,发现无法下载图片了 ,怎么办啊
最佳答案
2020-1-7 17:06:07
  1. import urllib.request
  2. import os

  3. def get_page(url):
  4.     '''抓取网页地址(从当前url中的'下一页'开始)
  5.     返回一个url'''
  6.     html = url_open(url).decode('utf-8')
  7.     a = html.find('current-comment-page')
  8.     a = html.find('jandan.net/ooxx/',a)
  9.     b = html.find('#comments',a) + 9
  10.    
  11.     return 'http://' + html[a:b]
  12.    

  13. def find_imgs(url):
  14.     '''获取当前url中的jpg源地址,返回一个列表,包含了当前页面的几乎所有jpg'''
  15.     img_addrs = []
  16.     html = url_open(url).decode('utf-8')
  17.     a = 0
  18.     b = 0
  19.     while True:
  20.         a = html.find('li id="comment',a)
  21.         if a == -1:
  22.             break
  23.         a = html.find('img src=',a) + 11
  24.         if a == 10:
  25.             break
  26.         b = html.find('.jpg',a, a + 255) + 4
  27.         if b == 3:
  28.             break
  29.         img_addrs.append(html[a:b])
  30.         a = b
  31.     print(img_addrs)
  32.     return img_addrs

  33. def save_imgs(folder, img_addrs):
  34.     '''将图像保存到文件夹'''
  35.     for each in img_addrs:
  36.         filename = each.split('/')[-1]
  37.         with open(filename, 'wb') as f:
  38.             img = url_open('http://' + each)
  39.             f.write(img)

  40. def url_open(url):
  41.     '''打开url,返回未解码的html'''
  42.     req = urllib.request.Request(url)
  43.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0')
  44.     '''
  45.     如需代理则uncomment
  46.     proxies = []
  47.     proxy = random.choice(proxies)
  48.     proxy_support = urllib.request.ProxyHandler({'http':proxy})
  49.     opener = urllib.request.build_opener(proxy_support)
  50.     urllib.request.install_opener(opener)
  51.    
  52.     '''
  53.     response = urllib.request.urlopen(req)
  54.     html = response.read()

  55.     return html

  56. def download_mm(folder='ooxx',pages = 10):
  57.     os.mkdir(folder)
  58.     os.chdir(folder)
  59.    
  60.     url = 'http://jandan.net/ooxx/'
  61.     next_page = get_page(url)
  62.     for page in range(pages):
  63.         print(next_page)
  64.         save_imgs(folder, find_imgs(next_page))
  65.         next_page = get_page(next_page)

  66. if __name__ == '__main__' :
  67.     download_mm('ooxx2',pages=5)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 17:06:07 | 显示全部楼层    本楼为最佳答案   
  1. import urllib.request
  2. import os

  3. def get_page(url):
  4.     '''抓取网页地址(从当前url中的'下一页'开始)
  5.     返回一个url'''
  6.     html = url_open(url).decode('utf-8')
  7.     a = html.find('current-comment-page')
  8.     a = html.find('jandan.net/ooxx/',a)
  9.     b = html.find('#comments',a) + 9
  10.    
  11.     return 'http://' + html[a:b]
  12.    

  13. def find_imgs(url):
  14.     '''获取当前url中的jpg源地址,返回一个列表,包含了当前页面的几乎所有jpg'''
  15.     img_addrs = []
  16.     html = url_open(url).decode('utf-8')
  17.     a = 0
  18.     b = 0
  19.     while True:
  20.         a = html.find('li id="comment',a)
  21.         if a == -1:
  22.             break
  23.         a = html.find('img src=',a) + 11
  24.         if a == 10:
  25.             break
  26.         b = html.find('.jpg',a, a + 255) + 4
  27.         if b == 3:
  28.             break
  29.         img_addrs.append(html[a:b])
  30.         a = b
  31.     print(img_addrs)
  32.     return img_addrs

  33. def save_imgs(folder, img_addrs):
  34.     '''将图像保存到文件夹'''
  35.     for each in img_addrs:
  36.         filename = each.split('/')[-1]
  37.         with open(filename, 'wb') as f:
  38.             img = url_open('http://' + each)
  39.             f.write(img)

  40. def url_open(url):
  41.     '''打开url,返回未解码的html'''
  42.     req = urllib.request.Request(url)
  43.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0')
  44.     '''
  45.     如需代理则uncomment
  46.     proxies = []
  47.     proxy = random.choice(proxies)
  48.     proxy_support = urllib.request.ProxyHandler({'http':proxy})
  49.     opener = urllib.request.build_opener(proxy_support)
  50.     urllib.request.install_opener(opener)
  51.    
  52.     '''
  53.     response = urllib.request.urlopen(req)
  54.     html = response.read()

  55.     return html

  56. def download_mm(folder='ooxx',pages = 10):
  57.     os.mkdir(folder)
  58.     os.chdir(folder)
  59.    
  60.     url = 'http://jandan.net/ooxx/'
  61.     next_page = get_page(url)
  62.     for page in range(pages):
  63.         print(next_page)
  64.         save_imgs(folder, find_imgs(next_page))
  65.         next_page = get_page(next_page)

  66. if __name__ == '__main__' :
  67.     download_mm('ooxx2',pages=5)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 17:07:39 | 显示全部楼层
前两天我让别人去爬,貌似没有加密了,可以直接看到图片地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 17:16:19 | 显示全部楼层
好歹怎么下载不了也给个截图哇
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 17:48:12 | 显示全部楼层
可能煎蛋网的反爬机制升级了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 23:51:41 | 显示全部楼层
网页地址改了,不是数字的那种,变成字母了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 04:00:08 | 显示全部楼层
把代码贴出来,才好知道有什么问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 09:31:23 | 显示全部楼层
我的这篇文章解决了这个问题
https://fishc.com.cn/forum.php?m ... p;page=1#pid4266356
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 12:21:20 | 显示全部楼层
meizi网可以下载,这里给出我写的一个代码
import urllib.request
import re
import time
import os

hostreferer={
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    'Referer':'https://www.mzitu.com'}
hostreferer2={
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    'Referer':'https://i.meizitu.net'}
   
def gethtml(url,host):
    p=urllib.request.Request(url,headers=host)
    response=urllib.request.urlopen(p)
    html=response.read()
    return html

def getpicture(html,host2):
    html=html.decode('utf-8')
    image=re.findall(r"data-original='(https:[^']+\.jpg)'",html)
    for each in image:
        filename = each.split('/')[-1]
        with open(filename, 'wb') as f:
            img = gethtml(each,host2)
            f.write(img)
def getpageurl(url,num):
    url=url+'page/'+str(num)+'/'
    return url
   
if __name__=='__main__':
    n=int(input('请输入需要下载mm图片的页数:'))
    url_origin='https://www.mzitu.com/xinggan/'
    url='https://www.mzitu.com/mm/'
    os.mkdir('mm')
    os.chdir('mm')
    for i in range(1,n+1):
        print('正在下载第%d页mm图片' %i)
        getpicture(gethtml(url,hostreferer),hostreferer2)
        url=getpageurl(url_origin,i)
        time.sleep(1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 13:32:44 | 显示全部楼层
这地址的图片尺寸有点大啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 15:31:30 | 显示全部楼层
可以参考我空间里的代码,网站有变化,我稍微改了一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-25 22:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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