首页 > 编程语言 >python爬虫增加多线程采集数据

python爬虫增加多线程采集数据

时间:2023-03-16 10:12:58浏览次数:36  
标签:task return python ip 爬虫 proxy text 多线程

Python爬虫对于现如今大数据满天飞的时代来说真是如虎添翼,也越来越多的领域喜欢用Python来实现数据采集。像 Scrapy、Request、BeautifuSoap、urlib等框架都可以实现自动爬虫。

既然爬虫ip是python网络爬虫不可缺少的部分,那高质量的,ip资源丰富遍布全国的,高匿极速稳定http爬虫ip,非常适合python网络爬虫运用场景。比如在有优质爬虫ip的前提下使用python实现百度网页采集,增加多线程处理,同时对网页返回的内容进行分类统计,实现代码如下:

import asyncio
import aiohttp
import threading
from collections import Counter

定义一个全局变量,用于存储分类结果
categories = Counter()

定义一个函数,用于根据文本内容进行分类
def classify(text):
# 这里可以使用任何文本分类的方法,例如正则表达式、机器学习等
# 这里为了简单起见,只使用了简单的字符串匹配
if "Python" in text:
return "Python"
elif "Java" in text:
return "Java"
elif "C++" in text:
return "C++"
else:
return "Other"

async def fetch_page(url, proxy):
# 创建一个 aiohttp 的 ClientSession 对象,并指定爬虫ip和端口
async with aiohttp.ClientSession(proxy=proxy) as session:
# 使用 session.get 方法发送请求,并获取响应对象
async with session.get(url) as response:
# 返回响应的文本内容
return await response.text()

async def main():
urls = ["https://www.baidu.com/s?wd=" + str(i) for i in range(10)] # 生成十个百度搜索网址

 

# 假设有一个文件 16yun.txt,每行存储一个爬虫iphost和端口,例如 jshk.com.cn:3333
# 读取文件中的所有爬虫ip,并存储在一个列表中
with open("16yun.txt") as f:
    proxies = [line.strip() for line in f]

tasks = [] # 创建一个空列表,用于存储 task 对象

# 遍历 urls 和 proxies 列表,为每个 url 配对一个 proxy,并创建 task 对象
for url, proxy in zip(urls, proxies):
    task = asyncio.create_task(fetch_page(url, proxy))
    tasks.append(task)

results = await asyncio.gather(*tasks) # 同时运行所有 task 并获取结果

# 创建一个线程池,用于执行分类任务
pool = threading.ThreadPoolExecutor(max_workers=4)

for result in results:
    print(result[:100]) # 打印每个网页的前 100 个字符
    
    # 使用线程池提交一个分类任务,并更新全局变量 categories
    category = pool.submit(classify, result).result()
    categories[category] += 1

# 关闭线程池并等待所有任务完成
pool.shutdown(wait=True)

# 打印最终的分类结果
print(categories)

Python asyncio.run() function(main()) # 运行主协程

通过上面的代码实现数据抓取后,我们也可以简单的根据数据来分析下爬虫ip池要求。

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

标签:task,return,python,ip,爬虫,proxy,text,多线程
From: https://www.cnblogs.com/q-q56731526/p/17221268.html

相关文章

  • Python模块
    Python基础之模块前置技术点:函数模块概述一个模块其实就是一个.py文件,同时大部分模块命名规范都是小写的,如time模块,os模块,pygame模块等模块可分为三类:内置模块:py......
  • Kali中python问题
    Kali中python问题1、查看python有哪些版本update-alternatives--displaypython2、如果没有,可以去/usr/bin查看kali自带哪些版本查看命令:lspython*3、添加不同的pyt......
  • 【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分
    全文下载链接:http://tecdat.cn/?p=23544最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。在本文中,长短期记忆网络——通常称为“LSTM”——是一种特殊......
  • Python 中 with 语句的详解
    1.概述在Python中,只要一个对象实现了__enter__和__exit__方法,那么就能使用with语句,该对象也可以称之为上下文管理器。官方文档的相关说明:上下文管理器的语法:......
  • python发邮件
    importsmtplibfromemail.mime.textimportMIMEText#邮件正文fromemail.headerimportHeader#邮件头#登录邮件服务器smtp_obj=smtplib.SMTP_SSL("s......
  • python配置和多版本
    python安装镜像安装包:https://registry.npmmirror.com/binary.html?path=python/选择python-3.*-amd64.exe即可pip下载包使用国内镜像的配置在C:\Users\username\p......
  • Python 异步: 异步推导式(18)
    动动发财的小手,点个赞吧!当我们想到“pythonic”时,理解,如列表和字典理解是Python的一个特性。这是我们执行循环的一种方式,与许多其他语言不同。Asyncio允许我们使用异......
  • Python Flask JinJa2 语法介绍与示例讲解
    目录一、概述二、JinJa2语法介绍与示例讲解1)变量2)控制结构3)循环结构4)宏5)过滤器6)继承7)包含一、概述Flask是一个轻量级的PythonWeb框架,支持Jinja2模板引擎。Jinja2是一个......
  • 基于python实现的抓取腾讯视频所有电影的爬虫
    我搜集了国内10几个电影网站的数据,里面近几十W条记录,用文本没法存,mongodb学习成本非常低,安装、下载、运行起来不会花你5分钟时间。#-*-coding:utf-8-*-importreimport......
  • python应用题 字符填充
    提示代码#请在_______完善代码s=input()print("{_______(1)_________}".format(_______(2)_________))......