一个简单的图片爬虫,运行日志的处理和记录

优采云 发布时间: 2021-06-17 03:23

  一个简单的图片爬虫,运行日志的处理和记录

  一个简单的图像爬虫。 采集对象是原燕雅设计官网的设计作品,实现了设计作品的采集爬取,包括采集对图片文字信息的处理,下载,但是视频的播放没有找到链接,也没有实现回放,所以没有写处理。

  目标网址:

  这里是使用self.log进行简单的操作日志处理和记录!

  几个关键点:

  1.正常操作,访问错误重试

  这里只是简单重试访问错误,不排除其他访问错误。处理比较简单粗暴。

  参考代码:

   # 六次重试

def s(self, url, headers,timeout=10, num_retries=6):

print(f">>正在爬取 {url}")

try:

response = requests.get(url, headers=headers, timeout=timeout)

time.sleep(2)

except:

if num_retries > 0: #num_retries是我们限定的重试次数

time.sleep(6) #延迟六秒

print(u'获取网页出错,8S后将获取倒数第:', num_retries, u'次')

return self.s(url, headers, timeout, num_retries - 1)

else:

print(f">> 访问 {url} 失败!")

with open("fail_url.txt", 'a+', encoding='utf-8') as f:

f.write(f'{url}\n')

print(f'保存访问失败网页链接成功!')

response = []

return response

  2.多线程下载图片

  应用多线程下载图片比较简单,一定程度上提高了下载图片的效率。

  参考源代码:

   #多线程下载图片

def dowm_imgs(self,img_urls,path):

threadings=[]

for img_url in img_urls:

t= threading.Thread(target=self.get_img,args=(img_url,path))

threadings.append(t)

t.start()

for x in threadings:

x.join()

print("多线程下载图片完成")

  3.re 常规简单应用,替换非法字符

  其实在保存文件的时候,很多特殊字符都是非法的,需要替换,否则保存文件的时候会报错,尤其是用它来创建保存路径并命名为文件的时候名字!

  参考源代码:

   #替换不合法字符

def filter(self,old_str):

pattern=r'[\|\/\\:\*\?\\\"]'

new_str= re.sub(pattern, "_", old_str) # 剔除不合法字符

return new_str

  4.获取所有链接

  参考源代码:

   #获取列表链接

def get_urllist(self):

for i in range(1,13):

if i==1:

url=self.url

else:

url="https://www.ndc.co.jp/works/page/{}/".format(i)

response=self.s(url,self.headers)

html=response.content.decode('utf-8')

tree=etree.HTML(html)

hrefs=tree.xpath('//div[@class="worksCard js-loadItem"]/a/@href')

hrefs=["https://www.ndc.co.jp{}".format(href) for href in hrefs]

print("已获取到第 {} 页作品链接为:".format(i))

print(hrefs)

self.urllist.extend(hrefs)

print("恭喜,共获取 {} 条链接!".format(len(self.urllist)))

  5.另存为文本文件

  参考源代码:

   #保存文本内容

def save_txt(self,title,content,path):

print("开始保存 {} 内容".format(title))

with open(f'{path}{title}.txt','w',encoding='utf-8') as f:

f.write(content)

print("保存 {} 内容成功!".format(title))

  6.下载图片

  参考源代码:

   #下载图片

def get_img(self,img_url,path):

r=self.s(img_url,self.headers)

if r:

img_name=img_url.split('/')[-1]

with open(f'{path}{img_name}.jpg','wb')as f:

f.write(r.content)

print("下载图片成功!")

time.sleep(1)

else:

print("下载图片失败!")

with open(f"{path}fail_img.txt", 'a+', encoding='utf-8') as f:

f.write(f'{img_url}\n')

print(f'保存访问失败的图片链接成功!')

  爬行效果

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线