鱼C论坛

 找回密码
 立即注册
查看: 2478|回复: 2

循环<urlopen error [WinError 10054] 远程主机强迫关闭了一个现有的连接。>

[复制链接]
发表于 2022-9-10 22:57:56 | 显示全部楼层 |阅读模式

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

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

x
如下所示,close(), time.sleep(),socket.setdefaulttimeout()都用过了,搞不明白


  1. import os
  2. import re
  3. import urllib
  4. import json
  5. import socket
  6. import urllib.request
  7. import urllib.parse
  8. import urllib.error
  9. import time
  10. import _thread

  11. timeout = 20
  12. socket.setdefaulttimeout(timeout)

  13. def SaveImage(url='https://original.img.cheerfun.dev/img-original/img/2019/03/05/03/09/55/73518990_p0.png',path='test.png'):
  14.     rq = urllib.request.Request(url)
  15.     rq.add_header('accept','image/webp,image/apng,image/*,*/*;q=0.8')
  16.     rq.add_header('accept-encoding','gzip, deflate, br')
  17.     rq.add_header('accept-languag','zh-CN,zh;q=0.9,en;q=0.8,pl;q=0.7')
  18.     rq.add_header('sec-fetch-dest','image')
  19.     rq.add_header('sec-fetch-mode','no-cors')
  20.     rq.add_header('sec-fetch-site','cross-site')
  21.     rq.add_header('referer','https://pixivic.com/popSearch')
  22.     rq.add_header('user-agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36')
  23.     rp = urllib.request.urlopen(rq)
  24.     #print(rp.getcode())
  25.     s=rp.read()
  26.     rq.close()
  27.     #print(len(s))
  28.     f=open(path,'wb')
  29.     f.write(s)
  30.     f.close()
  31.     time.sleep(10)

  32. class Crawler:
  33.     __time_sleep = 10
  34.     __amount = 0
  35.     __start_amount = 0
  36.     __counter = 0
  37.     headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}

  38.     def __init__(self, t=0.1, word='白上吹雪 '):
  39.         self.time_sleep = t
  40.         if not os.path.exists("./" + word):
  41.             os.mkdir("./" + word)
  42.         self.__counter = len(os.listdir('./' + word)) + 1

  43.     def get_suffix(self, name):
  44.         m = re.search(r'\.[^\.]*$', name)
  45.         if m.group(0) and len(m.group(0)) <= 5:
  46.             return m.group(0)
  47.         else:
  48.             return '.jpeg'

  49.     def save_image(self, rsp_data, word):
  50.         
  51.         for image_info in rsp_data['imageUrls']:
  52.             try:
  53.                 pps=image_info['original'].replace('https://i.pximg.net/','https://original.img.cheerfun.dev/')
  54.                 print(pps)
  55.                 suffix = self.get_suffix(pps)
  56.                 # 保存图片
  57.                 _thread.start_new_thread(SaveImage,(pps,'./' + word + '/' + str(self.__counter) + str(suffix)))
  58.             except urllib.error.HTTPError as urllib_err:
  59.                 print(urllib_err)
  60.                 continue
  61.             except Exception as err:
  62.                 time.sleep(10)
  63.                 print(err)
  64.                 print("产生未知错误,放弃保存")
  65.                 continue
  66.             else:
  67.                 sum=len(os.listdir('./' + word))
  68.                 print(f'第{str(self.__counter)}张涩图正在保存,已有{str(sum)}张涩图')
  69.                 self.__counter += 1
  70.                 time.sleep(self.time_sleep)
  71.         return

  72.     def get_images(self, word='白上吹雪'):
  73.         search = urllib.parse.quote(word)
  74.         pn = self.__start_amount
  75.         while pn <= self.__amount:
  76.             url='https://api.pixivic.com/illustrations?keyword='+search+'&page='+str(pn)
  77.             print(url)
  78.             try:
  79.                 req = urllib.request.Request(url=url, headers=self.headers)
  80.                 page = urllib.request.urlopen(req)
  81.                 rsp = page.read().decode('utf-8')
  82.             except UnicodeDecodeError as e:
  83.                 print(e)
  84.                 print('-----UnicodeDecodeErrorurl:', url)
  85.             except urllib.error.URLError as e:
  86.                 print(e)
  87.                 print("-----urlErrorurl:", url)
  88.             except socket.timeout as e:
  89.                 print(e)
  90.                 print("-----socket timout:", url)
  91.             else:
  92.                 rsp_data = json.loads(rsp)
  93.                 tmp=rsp_data['data']
  94.                 for ele in tmp:
  95.                     self.save_image(ele, word)
  96.                 print("下载下一页")
  97.                 pn += 1
  98.             
  99.                 page.close()
  100.         print("下载任务结束")
  101.         return

  102.     def start(self, word, spider_page_num=1, start_page=1):
  103.         self.__start_amount = start_page
  104.         self.__amount = spider_page_num
  105.         self.get_images(word)


  106. if __name__ == '__main__':
  107.     word=input('你想要谁的涩图?请输入:')
  108.     crawler = Crawler(1.3,word)
  109.     crawler.start(word, 10, 1)
复制代码


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

使用道具 举报

发表于 2022-9-11 16:27:16 | 显示全部楼层
'https://api.pixivic.com/illustrations?keyword='+search+'&page='+str(pn)
这个api无法访问,可能是接口不太对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-11 16:31:43 | 显示全部楼层
https://github.com/IkutoJyu/Pixiv-Illustration-Collection-Backend/blob/master/Pixivic.com%20Api%20Doc.md
好几年前的东西了,应该是无法访问了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 23:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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