鱼C论坛

 找回密码
 立即注册
查看: 1032|回复: 8

[已解决]求助,57讲报错原因

[复制链接]
发表于 2018-10-10 00:18:54 | 显示全部楼层 |阅读模式
10鱼币
代码按甲鱼老师的写法写的,但是报错:
代码:
import urllib.request
import os


def url_open(url):
    heads = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
    req = urllib.request.Request(url,headers = heads)
    response = urllib.request.urlopen(req)
    html = response.read()
   
    return html


def get_page(url):
    html = url_open(url).decode('utf-8')
    a = html.find('current-comment-page')+23
    b = html.find(']',a)
    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(html[a+9:b+4])
        else:
            b = a+9
        a = html.find('img src=',b)

    for each in img_addrs:
            print(each)
        
        


def save_imgs(folder,img_adddrs):
    pass



def download_mm(folder = '妹子图片',pages= 15):
    os.mkdir(folder)
    os.chdir(folder)

    url = 'http://jandan.net/ooxx/'
    page_number = int(get_page(url))

    for i in range(pages):
        page_number = page_number - i
        page_url = url + 'page-' + str(page_number) +'#comments'
        img_addrs = find_imgs(page_url)
        #save_imgs(folder,img_adddrs)


if __name__ == '__main__':
    download_mm()


报错原因:
Traceback (most recent call last):
  File "C:\Users\songyuxue\Desktop\download_mmtp.py", line 61, in <module>
    download_mm()
  File "C:\Users\songyuxue\Desktop\download_mmtp.py", line 56, in download_mm
    img_addrs = find_imgs(page_url)
  File "C:\Users\songyuxue\Desktop\download_mmtp.py", line 23, in find_imgs
    html = url_open(url).decode('utf-8')
  File "C:\Users\songyuxue\Desktop\download_mmtp.py", line 8, in url_open
    response = urllib.request.urlopen(req)
  File "C:\Users\songyuxue\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 162, in urlopen
    return opener.open(url, data, timeout)
  File "C:\Users\songyuxue\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 471, in open
    response = meth(req, response)
  File "C:\Users\songyuxue\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 581, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Users\songyuxue\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 509, in error
    return self._call_chain(*args)
  File "C:\Users\songyuxue\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 443, in _call_chain
    result = func(*args)
  File "C:\Users\songyuxue\AppData\Local\Programs\Python\Python35-32\lib\urllib\request.py", line 589, in http_error_default
    raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
最佳答案
2018-10-10 00:18:55
刚刚一直发布出来东西,,,js就是javascript动态加载,具体我也不大清楚,最近才在看,
你要爬这种可以看看小甲鱼的极客python,那里面讲了一点。还可以试试seleninum这种模拟浏览器行为的库。
我也很菜哈哈知道的就这么多了。
另外学爬虫的话给你分享一个课程
https://www.bilibili.com/video/av18202461
这里面讲的还可以,把前面的安装什么东西的跳过就行了。
慢慢来哈哈,一开始先从简单的网站爬起,在学习中接触更高级的

最佳答案

查看完整内容

刚刚一直发布出来东西,,,js就是javascript动态加载,具体我也不大清楚,最近才在看, 你要爬这种可以看看小甲鱼的极客python,那里面讲了一点。还可以试试seleninum这种模拟浏览器行为的库。 我也很菜哈哈知道的就这么多了。 另外学爬虫的话给你分享一个课程 https://www.bilibili.com/video/av18202461 这里面讲的还可以,把前面的安装什么东西的跳过就行了。 慢慢来哈哈,一开始先从简单的网站爬起,在学习中接触更高级 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-10 00:18:55 | 显示全部楼层    本楼为最佳答案   
刚刚一直发布出来东西,,,js就是javascript动态加载,具体我也不大清楚,最近才在看,
你要爬这种可以看看小甲鱼的极客python,那里面讲了一点。还可以试试seleninum这种模拟浏览器行为的库。
我也很菜哈哈知道的就这么多了。
另外学爬虫的话给你分享一个课程
https://www.bilibili.com/video/av18202461
这里面讲的还可以,把前面的安装什么东西的跳过就行了。
慢慢来哈哈,一开始先从简单的网站爬起,在学习中接触更高级的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-10 00:56:22 From FishC Mobile | 显示全部楼层
为什么又是这个问题?
由于视频是几年前的视频
网站己经改了
以上的代码己经不能用了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-10 01:09:05 | 显示全部楼层
我看了下,首先是这个网站变了,图片是用js加载的,所以你下载到的网页是不含图片链接的 你可以在find_imgs这个函数中打印b你会发现b是一个空数组,说明没有找到任何.jpg的文件,当然你也可以下载网页源代码手动搜索。
其次在download_mm这个函数中每看一页打印页码,你会发现打印到最后页码是-6.这当然不对了
  1.     for i in range(pages):
  2.         page_number = page_number - i
  3.         page_url = url + 'page-' + str(page_number) + '#comments'
  4.         print(page_number)
  5.         img_addrs = find_imgs(page_url)
  6.         # save_imgs(folder,img_adddrs)
复制代码

为什么呢
for i in range(pages):
        page_number = page_number - i  看这一行
你是想用pages控制爬取的页数 但是随着i逐渐增大你的页数是跳变的,例如初始page_number = 16
第一次  i = 0 page_number  = 16
第二次  i = 1 page_number  = 16 - 1 = 15
第三次  i = 2 page_number  = 15 - 2 = 13
第四次  i = 3 page_number  = 13 - 3 = 10
你会发现当第六次循环时页数已经是负的了
所以这一句应该改成page_number = page_number - 1

这样就不会报错了  ,但是由于网站的原因,你这种方法爬不到图片
所以还是继续努力往下学吧!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-10-10 19:42:45 | 显示全部楼层
1005204767 发表于 2018-10-10 01:09
我看了下,首先是这个网站变了,图片是用js加载的,所以你下载到的网页是不含图片链接的 你可以在find_imgs ...

感谢!!!
但是     “图片是用js加载”   这句是什么意思啊?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-10 22:41:34 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-10 22:47:15 | 显示全部楼层
本帖最后由 1005204767 于 2018-10-10 22:51 编辑

我也不知道为啥一直发不出来,,,,
js就是javascript动态加载。具体怎么爬我也不大熟悉。
你可以看看小甲鱼的极客python,那里面讲了一些,另外你可以看看selenium这种模拟浏览器的库肯定是可以的。
我也很菜哈哈,知道的就这么多了。
另外推荐给你一个学习爬虫的教程,里面讲的挺全的。
  1. https://www.bilibili.com/video/av18202461
复制代码

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

使用道具 举报

发表于 2018-10-10 22:51:17 | 显示全部楼层
终于,,,发出来了。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-10-11 11:56:19 | 显示全部楼层
  1. import urllib.request
  2. import os
  3. import base64
  4. import shutil
  5. def url_open(url):
  6.     heads = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
  7.     req = urllib.request.Request(url,headers = heads)
  8.     response = urllib.request.urlopen(req)
  9.     html = response.read()
  10.    
  11.     return html


  12. def get_page(url):
  13.     html = url_open(url).decode('utf-8')
  14.     a = html.find('current-comment-page">[')+23
  15.     b = html.find(']',a)
  16.     return html[a:b]
  17.    


  18. def find_imgs(url):
  19.     html = url_open(url).decode('utf-8')
  20.     img_addrs = []
  21.     a = html.find('"img-hash">')
  22.     while a!= -1:
  23.         b = html.find('<',a,a+255)
  24.         if b != -1:
  25.             img_addrs.append('http:'+base64.b64decode(html[a+11:b]).decode('utf-8'))
  26.         else:
  27.             break
  28.         a = html.find('"img-hash">',b)
  29.    
  30.     return img_addrs
  31.         


  32. def save_imgs(folder,img_addrs):

  33.     for img in img_addrs:
  34.         data =url_open(img)
  35.         with open(img.split('/')[-1],"wb") as f:
  36.             f.write(data)



  37. def download_mm(folder = '妹子图片',pages= 5):
  38.     if os.path.exists(folder):
  39.         shutil.rmtree(folder)
  40.     os.mkdir(folder)
  41.     os.chdir(folder)

  42.     url = 'http://jandan.net/ooxx/'
  43.     page_number = int(get_page(url))
  44.     for i in range(pages):   
  45.         page_url = url + 'page-' + str(page_number) +'#comments'
  46.         page_number = page_number - 1
  47.         img_addrs = find_imgs(page_url)
  48.         save_imgs(folder,img_addrs)
  49.     print('完成')


  50. if __name__ == '__main__':
  51.     download_mm()
复制代码


你的煎蛋已到达战场,对比一下你就知道了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-10 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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