鱼C论坛

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

[已解决]在小甲鱼Python视频中的56论一只爬虫的修养中,我运行后只能下载十几张图片,然后....

[复制链接]
发表于 2015-12-28 10:20:23 | 显示全部楼层 |阅读模式

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

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

x
然后就报出这个错误:OSError: [Errno 22] Invalid argument: 'script><!-- niuza -->\r\n\t\t\t\t<script>\r\nvar str=new Array("1.jpg'
不知这是什么错误,望知道的鱼友给我剖析剖析:loveliness:代码如下:
  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.     #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')
  7.     response = urllib.request.urlopen(req)
  8.     html = response.read()  #这里不加decode('utf-8')是因为下面要保存图片,而图片是以二进制的形式保存的。
  9.     return html

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

  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. def download_mm(folder='OOXX',pages=5):
  34.     os.mkdir(folder)
  35.     os.chdir(folder)

  36.     url = "http://jandan.net/ooxx/"
  37.     page_num = int(get_page(url))

  38.     for i in range(pages):
  39.         page_num -= i
  40.         page_url = url + 'page-' + str(page_num) + '#comments'
  41.         img_addrs = find_imgs(page_url)
  42.         save_imgs(folder,img_addrs)

  43. if __name__ == '__main__':
  44.     download_mm()
复制代码

最佳答案
2016-1-5 15:23:33
已解决。原因是获取图片地址时,用了a = html.find('img src=')此查找条件,将'script><!-- niuza -->\r\n\t\t\t\t<script>\r\nvar str=new Array("1.jpg'这个图片地址也查找了出来,然而这个并不是图片地址,故而文件存储出错。所以建议a = html.find('img src="http://ww'),缩小一下查找范围。可破。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-12-28 11:35:06 | 显示全部楼层
本帖最后由 hldh214 于 2015-12-28 11:36 编辑

数一数你爬下来的图片就发现, 你只爬了一页的图片, 脚本就出错了.
再看一看错误提示是在写图片的时候传入的参数有误, 于是在写图片前面加上调试print语句打印每次写入的文件名, 发现: 换页之后的文件名是这样的
script><!-- niuza -->

                                <script>

var str=new Array("1.jpg

推测是换页get_page函数写的不对~

另, 在设置保存图片的路径的时候推荐这样写, 防止重复创建文件夹报错
  1.     if not os.path.exists(folder):
  2.         os.mkdir(folder)
  3.     os.chdir(folder)
复制代码

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

发表于 2016-1-5 15:10:39 | 显示全部楼层
我也是一模一样的错误啊,不会是煎蛋网搞的吧。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-5 15:23:33 | 显示全部楼层    本楼为最佳答案   
已解决。原因是获取图片地址时,用了a = html.find('img src=')此查找条件,将'script><!-- niuza -->\r\n\t\t\t\t<script>\r\nvar str=new Array("1.jpg'这个图片地址也查找了出来,然而这个并不是图片地址,故而文件存储出错。所以建议a = html.find('img src="http://ww'),缩小一下查找范围。可破。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-6-30 20:48:03 | 显示全部楼层
kebikobe 发表于 2016-1-5 15:23
已解决。原因是获取图片地址时,用了a = html.find('img src=')此查找条件,将'script>\r\n\t\t\t\t\r\nvar ...

正确!!!太感谢了。你的方法是OK的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-3 22:58:40 | 显示全部楼层
kebikobe 发表于 2016-1-5 15:23
已解决。原因是获取图片地址时,用了a = html.find('img src=')此查找条件,将'script>\r\n\t\t\t\t\r\nvar ...

也遇到了同样的问题,感觉你说的是对的呢,但是将a = html.find('img src=')改成了a = html.find('img src="http://ww')后发现效果一样,还是现实会检索到'script><!-- niuza -->\r\n\t\t\t\t<script>\r\nvar str=new Array("1.jpg'这一段,怀疑是http前面的“的问题,请问有没有小伙伴遇到呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2016-10-28 00:24:13 | 显示全部楼层
还是用正则好些。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-16 15:39:38 | 显示全部楼层
艳子艳子艳子 发表于 2016-9-3 22:58
也遇到了同样的问题,感觉你说的是对的呢,但是将a = html.find('img src=')改成了a = html.find('img sr ...

我也是这样的问题,按楼上的改了之后还是不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-15 12:34:04 | 显示全部楼层
你把b的搜索长度改小一点就会好的,b=html.find('.jpg"',a,a+128)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-18 11:03:47 | 显示全部楼层
louis677 发表于 2017-3-15 12:34
你把b的搜索长度改小一点就会好的,b=html.find('.jpg"',a,a+128)

完美解决问题 谢谢啦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-21 17:16:41 | 显示全部楼层
现在已经爬取不下来了,虽然可以生成OOXX文件夹,但里面没有任何图片.
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-18 23:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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