python爬虫增加多线程获取数据

Python爬虫应用领域广泛,并且在数据爬取领域处于霸主位置,并且拥有很多性能好的框架,像Scrapy、Request、BeautifuSoap、urlib等框架可以实现爬行自如的功能,只要有能爬取的数据,Python爬虫均可实现。数据信息采集离不开Python爬虫,而python爬虫离不开代理ip,他们的结合可以做的事情很多,如广告营销、各种数据采集大数据分析,人工智能等,特别是在数据的抓取方面可以产生的作用巨大。 既然爬虫代理ip是python网络爬虫不可缺少的部分,那高质量的,ip资源丰富遍布全国的,高匿极速稳定http代理,非常适合python网络爬虫运用场景。比如在有优质代理IP的前提下使用python实现百度网页采集,增加多线程处理,同时对百度返回的内容进行分类统计,实现代码如下:

1import aiohttp 2import threading 3from collections import Counter 4 5# 定义一个全局变量,用于存储分类结果 6categories = Counter() 7 8# 定义一个函数,用于根据文本内容进行分类 9def classify(text): 10 # 这里可以使用任何文本分类的方法,例如正则表达式、机器学习等 11 # 这里为了简单起见,只使用了简单的字符串匹配 12 if "Python" in text: 13 return "Python" 14 elif "Java" in text: 15 return "Java" 16 elif "C++" in text: 17 return "C++" 18 else: 19 return "Other" 20 21async def fetch_page(url, proxy): 22 # 创建一个 aiohttp 的 ClientSession 对象,并指定代理IP和端口 23 async with aiohttp.ClientSession(proxy=proxy) as session: 24 # 使用 session.get 方法发送请求,并获取响应对象 25 async with session.get(url) as response: 26 # 返回响应的文本内容 27 return await response.text() 28 29async def main(): 30 urls = ["https://www.baidu.com/s?wd=" + str(i) for i in range(10)] # 生成十个百度搜索网址 31 32 # 假设有一个文件 16yun.txt,每行存储一个代理host和端口,例如 www.16yun.cn:3333 33 # 读取文件中的所有代理,并存储在一个列表中 34 with open("16yun.txt") as f: 35 proxies = [line.strip() for line in f] 36 37 tasks = [] # 创建一个空列表,用于存储 task 对象 38 39 # 遍历 urls 和 proxies 列表,为每个 url 配对一个 proxy,并创建 task 对象 40 for url, proxy in zip(urls, proxies): 41 task = asyncio.create_task(fetch_page(url, proxy)) 42 tasks.append(task) 43 44 results = await asyncio.gather(*tasks) # 同时运行所有 task 并获取结果 45 46 # 创建一个线程池,用于执行分类任务 47 pool = threading.ThreadPoolExecutor(max_workers=4) 48 49 for result in results: 50 print(result[:100]) # 打印每个网页的前 100 个字符 51 52 # 使用线程池提交一个分类任务,并更新全局变量 categories 53 category = pool.submit(classify, result).result() 54 categories[category] += 1 55 56 # 关闭线程池并等待所有任务完成 57 pool.shutdown(wait=True) 58 59 # 打印最终的分类结果 60 print(categories) 61 62asyncio.run(main()) # 运行主协程

通过上面的代码实现数据抓取后,我们也可以简单的根据数据来分析下代理ip池要求。 通过获取的数据量,能够大概了解需要访问多少网页,通过目标网站的反爬策略,能大概知道需要多少代理ip,需要多大的代理ip池。假设要访问50万个页面,每个ip能访40个页面后会触发反爬机制,那大概需要1万左右不重复的代理ip。这只是简单的一个计算,网站不同,反爬机制不同,对IP的需求是要以实际测试的数据为准的。在我们使用代理ip时,如何使爬虫更有效的进行,在爬虫采集数据信息需要注意哪些地方,我们一起来分析如何更有效的采集到数据信息,提高工作效率,下一次分享给大家参考。

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!

大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据。 并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤。本文将分为以下两个部分进行讲解在虎扑NBA官网球员页面中进行爬虫,获取球员数据。清洗整理爬取的球员数据,对其进行可视化。

Python网络爬虫与信息提取

title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''