鱼C论坛

 找回密码
 立即注册
查看: 4760|回复: 11

[已解决]Python爬虫求助

[复制链接]
发表于 2017-5-25 17:13:55 | 显示全部楼层 |阅读模式

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

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

x
在小甲鱼的ooxx那一课,为什么我的程序会报这个错误
  1. import urllib.request
  2. import os

  3. def url_open(url):
  4.     req=urllib.request.Request(url)
  5.     req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36')
  6.     response=urllib.request.urlopen(url)
  7.     html=response.read()
  8.     return html

  9. def get_page(url):
  10.     html=url_open(url).decode('utf-8')
  11.     a=html.find('current-comment-page')+23
  12.     b=html.find(']',a)
  13.     return html[a:b]
  14.    
  15. def find_imgs(url):
  16.     html=url_open(url).decode('utf-8')
  17.     img_addrs=[]
  18.     a=html.find('img src=')
  19.     while a!=-1:
  20.         b=html.find('.jpg',a,a+255)
  21.         if b!=-1:
  22.             img_addrs.append(html[a+9:b+4])
  23.         else:
  24.             b=a+9
  25.         a=html.find('img src=',b)
  26.     return img_addrs

  27. def save_imgs(folder,img_addrs):
  28.     for each in img_addrs:
  29.         filename=each.split('/')[-1]
  30.         with open(filename,'wb') as f:
  31.             img=url_open(each)
  32.             f.write(img)
  33.    
  34. def download_mm(folder='OOXX',pages=10):
  35.     os.mkdir(folder)
  36.     os.chdir(folder)
  37.     url=r'http://jandan.net/ooxx/'
  38.     page_num=int(get_page(url))
  39.     for i in range(pages):
  40.         page_num-=i
  41.         page_url=url+'page-'+str(page_num)+'#comments'
  42.         img_addrs=find_imgs(page_url)
  43.         save_imgs(folder,img_addrs)

  44. if __name__=='__main__':
  45.     download_mm()
复制代码
Traceback (most recent call last):
  File "E:/小甲鱼—《零基础入门学习Python》/056轮一只爬虫的自我修养4:OOXX/1.爬图片.py", line 49, in <module>
    download_mm()
  File "E:/小甲鱼—《零基础入门学习Python》/056轮一只爬虫的自我修养4:OOXX/1.爬图片.py", line 46, in download_mm
    save_imgs(folder,img_addrs)
  File "E:/小甲鱼—《零基础入门学习Python》/056轮一只爬虫的自我修养4:OOXX/1.爬图片.py", line 34, in save_imgs
    img=url_open(each)
  File "E:/小甲鱼—《零基础入门学习Python》/056轮一只爬虫的自我修养4:OOXX/1.爬图片.py", line 5, in url_open
    req=urllib.request.Request(url)
  File "E:\python\lib\urllib\request.py", line 329, in __init__
    self.full_url = url
  File "E:\python\lib\urllib\request.py", line 355, in full_url
    self._parse()
  File "E:\python\lib\urllib\request.py", line 384, in _parse
    raise ValueError("unknown url type: %r" % self.full_url)
ValueError: unknown url type: '//wx1.sinaimg.cn/mw600/66b3de17gy1ffxkfmik4lj20dw0jpwgz.jpg'
最佳答案
2017-5-29 15:25:49
cshiao 发表于 2017-5-29 12:49
对,就是这个,哪有没有啥解决的方法?

一个笨方法,每次爬取的地址你都看看是否是tp://s.jandan.com/static/gg/lanya2.jpg
如果是那么就不加入图片地址(就是你的24行)
每次执行加入图片地址(24行代码)之前用
if html[a+9:b+4] != 'tp://s.jandan.com/static/gg/lanya2.jpg':
    img_addrs.append(html[a+11:b+4])
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-5-25 18:48:51 | 显示全部楼层
wx1.sinaimg.cn/mw600/66b3de17gy1ffxkfmik4lj20dw0jpwgz.jpg这个图片是可以打开的,
在第24行代码改成img_addrs.append('http://'+html[a+11:b+4])
提示:你把wx1.sinaimg.cn/mw600/66b3de17gy1ffxkfmik4lj20dw0jpwgz.jpg复制粘帖到浏览器打开,然后再复制粘帖出来,你会发现多了个'http://',然后你懂的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 09:44:00 | 显示全部楼层
有必要   @小甲鱼
这一课的教程是不是有问题,为什么每个新手在这一课都要问一次这个问题呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-27 14:52:19 | 显示全部楼层
Aifrincoo 发表于 2017-5-25 18:48
wx1.sinaimg.cn/mw600/66b3de17gy1ffxkfmik4lj20dw0jpwgz.jpg这个图片是可以打开的,
在第24行代码改成img ...

谢谢,能爬下几张图了,就是中途还会报错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 15:23:40 | 显示全部楼层
中途会出错啊 怎么解决啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 16:22:10 | 显示全部楼层
夜枭1107 发表于 2017-5-27 14:52
谢谢,能爬下几张图了,就是中途还会报错

可能要挂上代理,没挂代理可能会这样,我运行了我以前保存的代码,也是一样的错误
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 19:08:28 | 显示全部楼层
Aifrincoo 发表于 2017-5-27 16:22
可能要挂上代理,没挂代理可能会这样,我运行了我以前保存的代码,也是一样的错误

可是小甲鱼后面用代理不也是出错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 19:55:43 | 显示全部楼层
你在31行至32行中间加一段print(each),我这里停下来的原因是碰到了http://tp://s.jandan.com/static/gg/lanya2.jpg这一行,把s.jandan.com/static/gg/lanya2.jpg放到浏览器里你会发现是广告,可能以前没有,现在突然有了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 19:56:39 | 显示全部楼层
cshiao 发表于 2017-5-27 19:08
可是小甲鱼后面用代理不也是出错了

也许这就是我保存的代码突然会出现你那种错误的原因吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-29 12:49:10 From FishC Mobile | 显示全部楼层
Aifrincoo 发表于 2017-5-27 19:55
你在31行至32行中间加一段print(each),我这里停下来的原因是碰到了http://tp://s.jandan.com/static/gg/lan ...

对,就是这个,哪有没有啥解决的方法?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-29 15:25:49 | 显示全部楼层    本楼为最佳答案   
cshiao 发表于 2017-5-29 12:49
对,就是这个,哪有没有啥解决的方法?

一个笨方法,每次爬取的地址你都看看是否是tp://s.jandan.com/static/gg/lanya2.jpg
如果是那么就不加入图片地址(就是你的24行)
每次执行加入图片地址(24行代码)之前用
if html[a+9:b+4] != 'tp://s.jandan.com/static/gg/lanya2.jpg':
    img_addrs.append(html[a+11:b+4])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-29 17:43:11 From FishC Mobile | 显示全部楼层
好的,谢谢,我去试试
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 23:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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