电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Python多线程批量采集图片

5页
  • 卖家[上传人]:知***
  • 文档编号:597195879
  • 上传时间:2025-01-20
  • 文档格式:DOCX
  • 文档大小:15.44KB
  • / 5 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、Python多线程批量采集图片前言本文来介绍如何多线程采集图片,多线程效率更快,但是,我们单一IP请求过于频繁,可能会被反爬,被封IP,所以,我们就要用到IP代理池,大家可以自己去网上找。环境使用python 3.9pycharm模块使用requests模块介绍requestsrequests是一个很实用的Python HTTP客户端库,爬虫和测试服务器响应数据时经常会用到,requests是Python语言的第三方的库,专门用于发送HTTP请求,使用起来比urllib简洁很多。parselparsel是一个python的第三方库,相当于css选择器+xpath+re。parsel由scrapy团队开发,是将scrapy中的parsel独立抽取出来的,可以轻松解析html,xml内容,获取需要的数据。相比于BeautifulSoup,xpath,parsel效率更高,使用更简单。rere模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。osos 就是 “operat

      2、ing system” 的缩写,顾名思义,os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用 os 模块,一方面可以方便地与操作系统进行交互,另一方面也可以极大增强代码的可移植性。csv它是一种文件格式,一般也被叫做逗号分隔值文件,可以使用 Excel 软件或者文本文档打开 。其中数据字段用半角逗号间隔(也可以使用其它字符),使用 Excel 打开时,逗号会被转换为分隔符。csv 文件是以纯文本形式存储了表格数据,并且在兼容各个操作系统。模块安装问题:如果安装python第三方模块:win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车在pycharm中点击Terminal(终端) 输入安装命令安装失败原因:失败一: pip 不是内部命令解决方法: 设置环境变量失败二: 出现大量报红 (read time out)解决方法: 因为是网络链接超时, 需要切换镜像源 清华: 阿里云: 中国科技大学 华中理工大学: 山东理工大学:https:/pypi.sdutlinux.org/

      3、豆瓣: 例如:pip3 install -i 模块名失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。代码实现什么是代理ip池? 通俗地比喻一下,它就是一个池子,里面装了很多代理ip。它有如下的行为特征:池子里的ip是有生命周期的,它们将被定期验证,其中失效的将被从池子里面剔除。池子里的ip是有补充渠道的,会有新的代理ip不断被加入池子中。池子中的代理ip是可以被随机取出的。 这样,代理池中始终有多个不断更换的、有效的代理ip,且我们可以随机从池子中取出代理ip,然后让爬虫程序使用代理ip访问目标网站,就可以避免爬虫被ban的情况。如何使用呢?import requests f = open(IP.txt,r) file = f.readline item = for proxies in file: proxies =eval(proxies.replace(,) item.

      4、append(proxies)proxies = random.choice(item)response = requests.get(url=url,headers=headers,proxies=proxies)print(response)我们这里先是把IP保存到了一个文件里面,我们在请求的时候加入proxies参数即可,这里的url就填我们要请求的网址。批量采集接下来,我们就进入到我们的正式学习中,我们今天请求的是某大学网站,由于涉及到隐私,网址不发了,这里教一个思路,其他网站也是一样的。单线程我们先试试单线程采集80张图片需要多少秒?import reimport requestsimport datetimeurls = startime = datetime.datetime.now()def download(url): name = re.findall(d+).jpg,url)0 img_content = requests.get(url=url).content with open(img +name+.jpeg, mode=wb) as f: f.write(

      5、img_content)for i in range(1,80): url = fhttp:/*/student/i.jpg urls.append(url)for url in urls: download(url)endtime = datetime.datetime.now()print(endtime-startime).seconds)我们这里就是把我们所有要下载的地址遍历到urls里面去,然后执行下载图片函数,我这里用时28秒,我们看看多线程多快。多线程我们这里加上多线程,多线程的数量取决于你的电脑性能,话不多说,直接上代码。from concurrent.futures import ThreadPoolExecutorimport reimport requestsimport datetimeurls = startime = datetime.datetime.now()def download(url): name = re.findall(d+).jpg,url)0 img_content = requests.get(url=url).content with open(img +name+.jpeg, mode=wb) as f: f.write(img_content)for i in range(1,80): url = fhttp:/*/student/i.jpg urls.append(url)with ThreadPoolExecutor(max_workers=10) as executor: for url in urls: executor.submit(download,url)endtime = datetime.datetime.now()print(endtime-startime).seconds)我们这里开了10个线程,下载完80张图片,只要3s,提升了很快,当我们的图片很多的时候,我们多线程的优势越来越明显。总结有的网站会限制IP,所以,我们就要用到IP代理池,本文就到这里了。

      《Python多线程批量采集图片》由会员知***分享,可在线阅读,更多相关《Python多线程批量采集图片》请在金锄头文库上搜索。

      点击阅读更多内容
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.