Python多线程Threading爬取图片,保存本地

Posted 白月如初12138

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python多线程Threading爬取图片,保存本地相关的知识,希望对你有一定的参考价值。

注意:之前用过openpyxl库保存数据到Excel文件写入不了,换用xlsxwriter

 1 import os
 2 import requests
 3 import re
 4 from openpyxl import load_workbook
 5 import xlsxwriter
 6 from multiprocessing.dummy import Pool as ThreadPool
 7 
 8 def spider(url):
 9     headers = {
10         User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36}
11     html = requests.get(url, headers, timeout=None)
12     pic_url = re.findall(class="product-image">.*?<img src="(.*?)"  height=", html.text, re.S)
13     sku = re.findall(q=(d+), url, re.S)#正则匹配链接后面的sku
14     if pic_url != []:
15         print(正在下载+sku[0]+图片,图片地址: + pic_url[0])
16         pic = requests.get(pic_url[0])
17         dir = cwd + \images\ + sku[0] + .jpg
18         # print(dir)
19         with open(dir, wb) as file:
20             file.write(pic.content)
21     else:
22         if sku !=[]:
23             print(没有找到 + sku[0]+产品)
24             No_images.append(sku[0])
25 #之前用过openpyxl创建新的Excel文件,但是写入不了,之后换用xlsxwriter保存数据到Excel
26 def save_excel(sku):
27     print(sku)
28     wb1 = xlsxwriter.Workbook(cwd + \ + No_images.xlsx)
29     ws1 = wb1.add_worksheet()
30     ws1.write(0, 0, No_images_sku)
31     for i in range(1,len(sku)+1):
32         ws1.write(i, 0, sku[i-1])
33     wb1.close()
34     print(保存没有图片的sku成功!)
35 
36 if __name__ == __main__:
37     cwd=os.getcwd()
38     path = cwd + \+最近12个月没有销量产品(201711).xlsx
39     wb =load_workbook(path)
40     ws = wb.worksheets[0]
41     pool =ThreadPool(50)#开启多少个进程,四核电脑
42     urls = []
43     No_images = []
44     for i in range(1, ws.max_row+1):#通过循环将Excel数据读取出来
45         sku = ws.cell(i,2).value
46         if sku !=None:
47             print(正在爬取第+str(i)+个sku图片)
48             url = http://www.fulchic.com/catalogsearch/result/?q= + str(sku)
49             urls.append(url)
50     pool.map(spider,urls)#多线程工作,其中,spider是爬虫函数名,urls是个爬取链接列表
51     pool.close()
52     pool.join()
53     # print(No_images)
54     save_excel(No_images)

 

以上是关于Python多线程Threading爬取图片,保存本地的主要内容,如果未能解决你的问题,请参考以下文章

python爬虫之多线程threading多进程multiprocessing协程aiohttp 批量下载图片

利用Python多线程爬虫——爬图片

python多线程爬虫+批量下载斗图啦图片项目(关注持续更新)

Python练习利用线程池爬取电影网站信息

单线程多线程多进程协程比较,以爬取新浪军事历史为例

Python 爬取堆糖图片