鱼C论坛

 找回密码
 立即注册
查看: 2149|回复: 9

[已解决]爬虫下载图片无法载入图片

[复制链接]
发表于 2019-1-17 20:25:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 快速收敛 于 2019-1-18 08:38 编辑

如图,爬虫下载图片无法加载,检查过后缀名没错.同一章节其他某些图片正常,请问大神是什么原因造成的?
  1. import os
  2. import re
  3. import requests
  4. import urllib.request,urllib.parse
  5. from fake_useragent import UserAgent
  6. from lxml import etree
  7. from queue import Queue
  8. from threading import Thread


  9. class Producers(Thread):
  10.     def __init__(self,producer,consumer,*args,**kwargs):
  11.         super().__init__()
  12.         self.producer = producer
  13.         self.consumer = consumer

  14.     def run(self):
  15.         while True:
  16.             producer_url = self.producer.get()
  17.             if self.producer.empty():
  18.                 print("生产完成")
  19.                 break
  20.             count = 0
  21.             while True:
  22.                 image_name = "index_%d.jpg" % count
  23.                 parse_url = producer_url + "index_%d.html" % count
  24.                 # print(parse_url)
  25.                 response = requests.get(parse_url,headers=HEADERS, proxies=PROXY)
  26.                 if response.status_code == 500:    break
  27.                 parse_data = re.findall(r"<script\stype.*?>var\sTitle=.*?</script>",response.text)[0]
  28.                 chapter = re.findall(r"火\w+",parse_data)[0]
  29.                 try:
  30.                     image_date = re.findall(r'mhurl="(.*?)"',parse_data)[0]
  31.                 except Exception:
  32.                     continue
  33.                 if '2017' not in image_date and '2016' not in image_date and '2018' not in image_date and '2019' not in image_date:
  34.                     image_url = "http://p0.xiaoshidi.net/" + image_date
  35.                 else:
  36.                     image_url = "http://p1.xiaoshidi.net/" + image_date
  37.                 count += 1
  38.                 # print(image_url)
  39.                 self.consumer.put((image_url,chapter,image_name))


  40. class Consumers(Thread):
  41.     def __init__(self,producer,consumer,*args,**kwargs):
  42.         super().__init__()
  43.         self.producer = producer
  44.         self.consumer = consumer

  45.     def run(self):
  46.         while True:
  47.             image_url,chapter,image_name = self.consumer.get()
  48.             if self.consumer.empty() and self.producer.empty():
  49.                 print("总程序下载完成")
  50.                 break
  51.             if not os.path.exists(chapter):
  52.                 os.mkdir(chapter)
  53.             filename = chapter + "/" +image_name
  54.             try:
  55.                 urllib.request.urlretrieve(image_url,filename)
  56.                 print("%s第%s下载完毕" % (chapter,image_name))
  57.             except Exception:
  58.                 continue



  59. def main():
  60.     producer = Queue(600)
  61.     consumer = Queue(2000)
  62.     response = requests.get(BASE_URL, headers=HEADERS)
  63.     # html = etree.HTML(response.text)
  64.     page_url = [BASE_URL + urllib.parse.quote(url[1:-1]) for url in re.findall(r"<a.href=(\S+).title=.*?",response.text)]
  65.     for url in page_url:
  66.         producer.put(url)
  67.     for i in range(5):
  68.         p = Producers(producer,consumer)
  69.         p.start()
  70.     for i in range(10):
  71.         c = Consumers(producer, consumer)
  72.         c.start()


  73. if __name__ == '__main__':
  74.     BASE_URL = "https://manhua.fzdm.com/1/"
  75.     UA = UserAgent(verify_ssl=False)
  76.     HEADERS = {"User-Agent": UA.random}
  77.     PROXY = {
  78.         "http": "111.177.178.217:9999",
  79.         "http": "113.128.30.28:9999",
  80.         "http": "117.70.38.149:9999",
  81.         "http": "121.233.251.4:9999",
  82.     }
  83.     main()
复制代码

这是代码,下载火影漫画,图片在网站都能单独打开,但是不知道为啥,下载下来章节部分不能显示,检查过图片网址也是正确的啊
最佳答案
2019-1-18 15:54:45
章节图片哪里是减一
假如图片是2018的话,二级域名是17
2019年的话,二级域名是18.
你的代码没看错的话,应该是没有这里的写法。

看下面的js代码
  1. <script type="text/javascript">var Title="海贼王922话";var Clid="2";var mhurl="2018/10/26055707481977.jpg";var Url="922";var nexturl="923";var CTitle="海贼王";var mhss=getCookie("picHost");if(mhss==""){mhss="p1.xiaoshidi.net"}if(mhurl.indexOf("2016")==-1&&mhurl.indexOf("2017")==-1&&mhurl.indexOf("2018")==-1&&mhurl.indexOf("2019")==-1){mhss="p0.xiaoshidi.net"}var mhpicurl=mhss+"/"+mhurl;if(mhurl.indexOf("http")!=-1){mhpicurl=mhurl}function nofind(){var e=event.srcElement?event.srcElement:event.target;e.src="http://p1.xiaoshidi.net/"+mhurl;var i=new Date;i.setTime(i.getTime()-1);document.cookie="picHost=0;path=/;domain=fzdm.com;expires="+i.toGMTString();e.onerror=null;toastr.success("已更换为最快服务器~",{timeOut:5e3})}  ;document.write('<img src="http://'+mhpicurl+'" width="0" height="0" />');  </script>
复制代码

2019-01-17 20-23-08 的屏幕截图.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-17 20:44:05 | 显示全部楼层
假图片,你把你下载的图片url放到浏览器看能不能看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 08:29:23 | 显示全部楼层
塔利班 发表于 2019-1-17 20:44
假图片,你把你下载的图片url放到浏览器看能不能看

可以看的,其他的能看啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 08:33:18 | 显示全部楼层
快速收敛 发表于 2019-1-18 08:29
可以看的,其他的能看啊

说的是你打不开这张
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 08:40:44 | 显示全部楼层
塔利班 发表于 2019-1-18 08:33
说的是你打不开这张

在网站能打开的,单独请求就可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 08:46:54 | 显示全部楼层
那你检查下你的网站这个图片的url是否是图片真实的网址,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:48:19 | 显示全部楼层
只能说明你在章节图片链接哪里的js代码理解错误了。
导致打开错误的图片
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 15:54:45 | 显示全部楼层    本楼为最佳答案   
章节图片哪里是减一
假如图片是2018的话,二级域名是17
2019年的话,二级域名是18.
你的代码没看错的话,应该是没有这里的写法。

看下面的js代码
  1. <script type="text/javascript">var Title="海贼王922话";var Clid="2";var mhurl="2018/10/26055707481977.jpg";var Url="922";var nexturl="923";var CTitle="海贼王";var mhss=getCookie("picHost");if(mhss==""){mhss="p1.xiaoshidi.net"}if(mhurl.indexOf("2016")==-1&&mhurl.indexOf("2017")==-1&&mhurl.indexOf("2018")==-1&&mhurl.indexOf("2019")==-1){mhss="p0.xiaoshidi.net"}var mhpicurl=mhss+"/"+mhurl;if(mhurl.indexOf("http")!=-1){mhpicurl=mhurl}function nofind(){var e=event.srcElement?event.srcElement:event.target;e.src="http://p1.xiaoshidi.net/"+mhurl;var i=new Date;i.setTime(i.getTime()-1);document.cookie="picHost=0;path=/;domain=fzdm.com;expires="+i.toGMTString();e.onerror=null;toastr.success("已更换为最快服务器~",{timeOut:5e3})}  ;document.write('<img src="http://'+mhpicurl+'" width="0" height="0" />');  </script>
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-1-18 18:11:09 | 显示全部楼层
wongyusing 发表于 2019-1-18 15:54
章节图片哪里是减一
假如图片是2018的话,二级域名是17
2019年的话,二级域名是18.

假如图片是2018的话,二级域名是17
2019年的话,二级域名是18
请问这是哪里解析的?
我研究了半天,理解的是,里面包含2016,2017,2018,2019,就是p1,其他的就是p0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-1-18 23:00:50 | 显示全部楼层
快速收敛 发表于 2019-1-18 18:11
假如图片是2018的话,二级域名是17
2019年的话,二级域名是18
请问这是哪里解析的?

你要看章节的图片哪里。简单来说,章节的第0页
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 12:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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