鱼C论坛

 找回密码
 立即注册
查看: 1615|回复: 23

[已解决]【求助】煎蛋爬妹子图程序出现不知名错误

[复制链接]
发表于 2020-8-11 18:24:38 | 显示全部楼层 |阅读模式

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

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

x
import urllib.request
import os
import base64
import re

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/84.0.4147.105 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 = r'<span class="current-comment-page">\[(\d+)\]</span>'
    page_list = re.findall(a,html)

    for each in page_list:
        t = each

    return t

      
def base_num(page_num):
    times = '20200811-' + str(page_num)
    s = times.encode('utf-8')
    sw = base64.b64encode(s)
    str_sw = str(sw)
    string = str_sw.split("'")[-1]
    print (string)
    return string


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


    a = r'<img src="([^"]+\.jpg)"'
    b = re.findall(a,html)
   
    if not len(b):
        pic_url_list.append(b)

    for each in pic_url_list:
        print(each)

        
def save_pic(folder, pic_url):
    pass

def download_mm(folder = 'mm', pages = 10):
    #创建一个文件夹
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    #获取页码
    page_num = int(get_page(url))

    for i in range(pages):
        page_num -=i
        #base64加密
        x = base_num(page_num)
        #获取页码地址
        page_url = url + x + '#comments'
        #获取图片具体地址并保存成列表
        pic_url = find_pic_url(page_url)
        save_pic(folder, pic_url)

        
if __name__ == '__main__':
    download_mm()


我这个到底哪里出错我也拿不准,求大神
最佳答案
2020-8-15 11:22:56
本帖最后由 suchocolate 于 2020-8-15 11:53 编辑

不用xpath或bs太低效了


  1. import requests
  2. from lxml import etree
  3. import os


  4. def ck_dir():
  5.     # Please fill in the name of the path where you want to save the images
  6.     pic_dir = 'mm'
  7.     if not os.path.exists(pic_dir):
  8.         os.mkdir(pic_dir)
  9.     os.chdir(pic_dir)


  10. def get_pic_url(act_url):
  11.     r = requests.get(act_url, headers=headers)
  12.     html = etree.HTML(r.text)
  13.     # pic list
  14.     result = html.xpath('//img/@src')
  15.     # last pic is not mm pic
  16.     result.pop()
  17.     # next page url
  18.     act_nx_pg = html.xpath('//a[contains(text(),"99")]/@href')[0]
  19.     return result, act_nx_pg


  20. def main():
  21.     # pic counter
  22.     n = 1
  23.     # check pic directory
  24.     ck_dir()
  25.     # pic url list
  26.     pic_list = []
  27.     # next page url
  28.     nx_pg_url = ''
  29.     # get pics urls
  30.     for item in range(100, 98, -1):
  31.         if item == 100:
  32.             pic_url, nx_pg = get_pic_url(url)
  33.         else:
  34.             pic_url, nx_pg = get_pic_url(nx_pg_url)
  35.         nx_pg_url = f'{url}/{nx_pg}#comments'
  36.         pic_list.extend(pic_url)
  37.     # download pics
  38.     for item in pic_list:
  39.         r = requests.get('http:' + item, headers=headers)
  40.         pic_name = item.split('/')[-1]
  41.         with open(pic_name, 'wb') as f:
  42.             f.write(r.content)
  43.             print(f'{pic_name} has been downloaded. total number: {n}')
  44.             n = n + 1


  45. if __name__ == '__main__':
  46.     # global variables
  47.     url = 'http://jandan.net/ooxx'
  48.     headers = {'User-agent': 'firefox'}
  49.     # main func
  50.     main()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-11 18:29:04 | 显示全部楼层
报错信息是啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-11 18:34:36 | 显示全部楼层
煎蛋的妹子图还有???
弹幕上都说煎蛋的图没了……
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-11 18:35:48 | 显示全部楼层


是因为你没有把创建的文件夹删除吧,把你代码下 mm 文件夹删除即可,然后代码就正常运行了


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 20:26:38 | 显示全部楼层
Twilight6 发表于 2020-8-11 18:35
是因为你没有把创建的文件夹删除吧,把你代码下 mm 文件夹删除即可,然后代码就正常运行了

不是,我知道这个错误 它一直刷新Squeezed text (884lines)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 20:27:54 | 显示全部楼层

Squeezed text (884lines)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-11 20:29:22 | 显示全部楼层

点开它
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 20:35:57 | 显示全部楼层
weiter 发表于 2020-8-11 18:34
煎蛋的妹子图还有???
弹幕上都说煎蛋的图没了……

有 叫随手拍
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 20:36:49 | 显示全部楼层

我就卡了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-11 21:17:05 | 显示全部楼层
  1. import urllib.request
  2. import os
  3. import base64
  4. import re


  5. def url_open(url):
  6.     req = urllib.request.Request(url)
  7.     req.add_header('User-Agent',
  8.                    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 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.     a = r'<span class="current-comment-page">\[(\d+)\]</span>'
  16.     page_list = re.findall(a, html)

  17.     for each in page_list:
  18.         t = each

  19.     return t


  20. def base_num(page_num):
  21.     times = '20200811-' + str(page_num)
  22.     s = times.encode('utf-8')
  23.     sw = base64.b64encode(s)
  24.     str_sw = str(sw)
  25.     string = str_sw.split("'")[-1]
  26.     print(string)
  27.     return string


  28. def find_pic_url(url):
  29.     html = url_open(url).decode('utf-8')
  30.     pic_url_list = []

  31.     a = r'<img src="([^"]+\.jpg)"'
  32.     b = re.findall(a, html)

  33.     if not len(b):
  34.         pic_url_list.append(b)

  35.     for each in pic_url_list:
  36.         print(each)


  37. def save_pic(folder, pic_url):
  38.     pass


  39. def download_mm(folder='mm', pages=10):
  40.     # 创建一个文件夹
  41.     os.mkdir(folder)
  42.     os.chdir(folder)

  43.     url = 'http://jandan.net/ooxx/'
  44.     # 获取页码
  45.     page_num = int(get_page(url))

  46.     for i in range(pages):
  47.         page_num -= i
  48.         # base64加密
  49.         x = base_num(page_num)
  50.         # 获取页码地址
  51.         page_url = url + x + '#comments'
  52.         # 获取图片具体地址并保存成列表
  53.         pic_url = find_pic_url(page_url)
  54.         save_pic(folder, pic_url)


  55. if __name__ == '__main__':
  56.     download_mm()
复制代码

看起来,你的代码没完成,程序没问题,继续写吧(已修改)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:23:23 | 显示全部楼层
1q23w31 发表于 2020-8-11 21:17
看起来,你的代码没完成,程序没问题,继续写吧(已修改)

好,我试试,谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:31:22 | 显示全部楼层
1q23w31 发表于 2020-8-11 21:17
看起来,你的代码没完成,程序没问题,继续写吧(已修改)

还是不行啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-11 21:31:56 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:34:56 | 显示全部楼层

我写完了 还是没下载
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-11 21:35:30 | 显示全部楼层
二农戏猪` 发表于 2020-8-11 21:34
我写完了 还是没下载

把写完的发一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:35:59 | 显示全部楼层
1q23w31 发表于 2020-8-11 21:35
把写完的发一下

import urllib.request
import os
import base64
import re

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/84.0.4147.105 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 = r'<span class="current-comment-page">\[(\d+)\]</span>'
    page_list = re.findall(a,html)

    for each in page_list:
        t = each

        return t

      
def base_num(page_num):
    times = '20200811-' + str(page_num)
    s = times.encode('utf-8')
    sw = base64.b64encode(s)
    str_sw = str(sw)
    string = str_sw.split("'")[-1]
   
    return string


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


    a = r'<img src="([^"]+\.jpg)"'
    b = re.findall(a,html)
   
    if not len(b):
        pic_url_list.append(b)

    return pic_url_list

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

def download_mm(folder = 'mm', pages = 10):
    #创建一个文件夹
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    #获取页码
    page_num = int(get_page(url))

    for i in range(pages):
        page_num -=i
        #base64加密
        x = base_num(page_num)
        #获取页码地址
        page_url = url + x + '#comments'
        #获取图片具体地址并保存成列表
        pic_url = find_pic_url(page_url)
        save_pic(folder, pic_url_list)

        
if __name__ == '__main__':
    download_mm()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:41:19 | 显示全部楼层
1q23w31 发表于 2020-8-11 21:35
把写完的发一下

iimport urllib.request
import os
import base64
import re

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/84.0.4147.105 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 = r'<span class="current-comment-page">\[(\d+)\]</span>'
    page_list = re.findall(a,html)

    for each in page_list:
        t = each

    return t

      
def base_num(page_num):
    times = '20200811-' + str(page_num)
    s = times.encode('utf-8')
    sw = base64.b64encode(s)
    str_sw = str(sw)
    string = str_sw.split("'")[-1]
   
    return string


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


    a = r'<img src="([^"]+\.jpg)"'
    b = re.findall(a,html)
   
    if not len(b):
        pic_url.append(b)

    return pic_url

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

def download_mm(folder = 'mm', pages = 10):
    #创建一个文件夹
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    #获取页码
    page_num = int(get_page(url))

    for i in range(pages):
        page_num -=i
        #base64加密
        x = base_num(page_num)
        #获取页码地址
        page_url = url + x + '#comments'
        #获取图片具体地址并保存成列表
        pic_url = find_pic_url(page_url)
        save_pic(folder, pic_url)

        
if __name__ == '__main__':
    download_mm()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:43:21 | 显示全部楼层
import urllib.request
import os
import base64
import re

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/84.0.4147.105 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 = r'<span class="current-comment-page">\[(\d+)\]</span>'
    page_list = re.findall(a,html)

    for each in page_list:
        t = each

    return t

      
def base_num(page_num):
    times = '20200811-' + str(page_num)
    s = times.encode('utf-8')
    sw = base64.b64encode(s)
    str_sw = str(sw)
    string = str_sw.split("'")[-1]
   
    return string


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


    a = r'<img src="([^"]+\.jpg)"'
    b = re.findall(a,html)
   
    if not len(b):
        pic_url.append(b)

    return pic_url

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

def download_mm(folder = 'mm', pages = 10):
    #创建一个文件夹
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    #获取页码
    page_num = int(get_page(url))

    for i in range(pages):
        page_num -=i
        #base64加密
        x = base_num(page_num)
        #获取页码地址
        page_url = url + x + '#comments'
        #获取图片具体地址并保存成列表
        pic_url = find_pic_url(page_url)
        save_pic(folder, pic_url)

        
if __name__ == '__main__':
    download_mm()
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:48:33 | 显示全部楼层
需要审核
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-11 21:50:25 | 显示全部楼层
1q23w31 发表于 2020-8-11 21:35
把写完的发一下
  1. import urllib.request
  2. import os
  3. import base64
  4. import re

  5. def url_open(url):
  6.     req = urllib.request.Request(url)
  7.     req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36')
  8.     response = urllib.request.urlopen(req)
  9.     html = response.read()
  10.     print(html)
  11.    
  12.     return html

  13.    
  14. def get_page(url):
  15.     html = url_open(url).decode('utf-8')

  16.     a = r'<span class="current-comment-page">\[(\d+)\]</span>'
  17.     page_list = re.findall(a,html)

  18.     for each in page_list:
  19.         t = each

  20.         return t

  21.       
  22. def base_num(page_num):
  23.     times = '20200811-' + str(page_num)
  24.     s = times.encode('utf-8')
  25.     sw = base64.b64encode(s)
  26.     str_sw = str(sw)
  27.     string = str_sw.split("'")[-1]
  28.    
  29.     return string


  30. def find_pic_url(url):
  31.     html = url_open(url).decode('utf-8')
  32.     pic_url = []


  33.     a = r'<img src="([^"]+\.jpg)"'
  34.     b = re.findall(a,html)
  35.    
  36.     if not len(b):
  37.         pic_url.append(b)

  38.     return pic_url

  39.         
  40. def save_pic(folder, pic_url):
  41.     for each in pic_url:
  42.         filename = each.split('/')[-1]
  43.         with open(filename, 'wb') as f:
  44.             img = open_url(each)
  45.             f.write(img)

  46. def download_mm(folder = 'mm', pages = 10):
  47.     #创建一个文件夹
  48.     os.mkdir(folder)
  49.     os.chdir(folder)

  50.     url = 'http://jandan.net/ooxx/'
  51.     #获取页码
  52.     page_num = int(get_page(url))

  53.     for i in range(pages):
  54.         page_num -=i
  55.         #base64加密
  56.         x = base_num(page_num)
  57.         #获取页码地址
  58.         page_url = url + x + '#comments'
  59.         #获取图片具体地址并保存成列表
  60.         pic_url = find_pic_url(page_url)
  61.         save_pic(folder, pic_url)

  62.         
  63. if __name__ == '__main__':
  64.     download_mm()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-25 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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