python使用aiohttp+代理+header爬取安居客

简介: 使用aiohttp来爬取网站,使用不同的代理IP和header

根据国家统计局发布大中城市房价格指数显示,新房已持续下跌约17个月,二手房下跌持续18个月。但是今年2月,开始出现了逆转,新房和二手房价格环比均转涨。特别是今年春节过后,多地二手房市场快速回暖,成交量反弹,房价也跟着有所回升。这是不是预示着房价的"小阳春"来了,但是能持续多久也是
正好这里我们可以使用scrapy爬虫去网上抓抓成都最近的房价情况,看下房价是不是真的开第二波走热了。数据来源就以安居客为目标https://chengdu.anjuke.com/sale/?from=HomePage_TopBar
经过简单分析,现在的安居客反爬机制做的比较严,所以为了伪装真实用户访问页面,抓取过程中最重要的就是获取浏览器正常请求页面数据的 http 请求头,并在 requests 中设置一样的请求头。其中最重要的请求头部字段就是 user-agent 。另外网可能也会设置 cookie 字段,存储用户本次访问的会话信息,其中可能也包含了数据访问的权限信息,这种情况下,为了能正确抓取到数据,就必须提供此字段。还有就是代理IP的添加也是必不可少的辅助工具。这里我们就使用aiohttp来爬取网站,使用不同的代理IP和header。实现过程如下:

import asyncio
import aiohttp
from aiohttp_socks import ProxyConnector
import random

# 定义目标网站和代理服务器的列表
urls = ["https://chengdu.anjuke.com/sale/?from=HomePage_TopBar", "https://chengdu.anjuke.com/sale/?from=HomePage_TopBar"]
proxies = ["socks5://16yun:16ip@www.16yun.cn:8888", "socks5://16yun:16ip@www.16yun.cn:11111", "socks5://username:password@host3:port3"]

# 定义用户代理的列表
user_agents = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_6_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15",
    "Mozilla/5.0 (iPhone; CPU iPhone OS 15_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15 Mobile/15E148 Safari/604.1"
]

# 定义异步函数来发送GET请求,并使用不同的代理服务器和头部来连接目标网站
async def fetch(url):
    try:
        # 随机选择一个代理服务器和一个用户代理
        proxy = random.choice(proxies)
        user_agent = random.choice(user_agents)
        
        # 创建一个aiohttp_socks.ProxyConnector对象,用来设置代理服务器的参数    
        connector = ProxyConnector.from_url(proxy)
        
        # 创建一个字典,用来设置头部参数    
        headers = {"User-Agent": user_agent}
        
        # 创建并启动一个aiohttp.ClientSession对象,用来发送HTTP请求,并传入connector和headers参数    
        async with aiohttp.ClientSession(connector=connector, headers=headers) as session:
            async with session.get(url) as response:
                # 检查响应状态码是否为200,否则抛出异常
                if response.status != 200:
                    raise Exception(f"Bad status code: {response.status}")
                # 返回响应内容的文本格式
                return await response.text()
                
            # 在每次请求之后关闭会话    
            await session.close()
            
    except Exception as e:
        # 打印异常信息,并返回None
        print(e)
        return None

# 定义异步主函数来创建并运行多个协程任务,并控制并发数量和超时时间等参数    
async def main():
    # 创建一个空列表,用来存储所有的协程任务        
    tasks = []
    # 循环遍历目标网站列表,每次创建一个fetch函数的协程任务,并添加到列表中        
    for url in urls:
        task = asyncio.create_task(fetch(url))
        tasks.append(task)
        
    # 使用asyncio.gather函数来收集并执行所有的协程任务,并返回一个包含所有结果的列表        
    results = await asyncio.gather(*tasks)
    
    # 打印结果列表    
    print(results)

# 在程序入口处调用异步主函数,并启动事件循环         
if __name__ == "__main__":
     asyncio.run(main())

整体来说短时交易量比较高并不意味着市场进入了快速升温阶段,而且还只是小幅回暖,主要还是在局部、短时间内不一定就能大面积的上涨。

相关文章
|
3月前
|
搜索推荐 程序员 调度
精通Python异步编程:利用Asyncio与Aiohttp构建高效网络应用
【10月更文挑战第5天】随着互联网技术的快速发展,用户对于网络应用的响应速度和服务质量提出了越来越高的要求。为了构建能够处理高并发请求、提供快速响应时间的应用程序,开发者们需要掌握高效的编程技术和框架。在Python语言中,`asyncio` 和 `aiohttp` 是两个非常强大的库,它们可以帮助我们编写出既简洁又高效的异步网络应用。
217 1
|
2月前
|
Python
Python中的异步编程:使用asyncio和aiohttp实现高效网络请求
【10月更文挑战第34天】在Python的世界里,异步编程是提高效率的利器。本文将带你了解如何使用asyncio和aiohttp库来编写高效的网络请求代码。我们将通过一个简单的示例来展示如何利用这些工具来并发地处理多个网络请求,从而提高程序的整体性能。准备好让你的Python代码飞起来吧!
116 2
|
5月前
|
机器学习/深度学习 算法 机器人
使用 Python TorchRL 进行多代理强化学习
本文详细介绍了如何使用TorchRL库解决多代理强化学习(MARL)问题,重点讨论了在多代理环境中应用近端策略优化(PPO)。通过使用VMAS模拟器,该文展示了如何在GPU上并行训练多机器人系统,使其在避免碰撞的同时到达目标。文章涵盖了依赖项安装、PPO原理、策略与评论家网络设计、数据收集及训练循环,并强调了TorchRL在简化开发流程、提升计算效率方面的优势。无论是集中式还是分布式评论家配置,TorchRL均能有效支持复杂的MARL研究与实践。
90 5
使用 Python TorchRL 进行多代理强化学习
|
5月前
|
Python
Python中的异步编程:理解并使用asyncio和aiohttp
【8月更文挑战第24天】在Python中,异步编程是一个强大的工具,它可以帮助我们编写出高性能的网络应用。本文将介绍Python的异步编程库asyncio和aiohttp,并通过示例代码展示如何使用它们来创建一个简单的HTTP服务器。我们将看到,通过使用这些库,我们可以在不阻塞主线程的情况下处理大量的并发请求。
|
3月前
|
中间件 API 调度
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用
69 4
|
3月前
|
中间件 API 调度
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用 精选
深入探究 Python 异步编程:利用 asyncio 和 aiohttp 构建高效并发应用 精选
40 2
|
4月前
|
调度 开发者 Python
Python中异步编程的魔法:深入理解asyncio和aiohttp
【9月更文挑战第26天】本文旨在探索Python语言中的异步编程世界,通过深入浅出的方式介绍核心库asyncio和流行的HTTP客户端aiohttp。我们将从基础概念入手,逐步过渡到高级应用,揭示如何在不阻塞主线程的情况下实现高效并发操作。文章不仅提供理论框架,还附带实战代码示例,让读者能够快速掌握并应用到实际项目中。
56 3
|
4月前
|
测试技术 API Python
Python中requests、aiohttp、httpx性能对比
这篇文章对比了Python中三个流行的HTTP客户端库:requests、aiohttp和httpx,在发送HTTP请求时的性能,并提供了测试代码和结果,以帮助选择适合不同应用场景的库。
379 2
|
3月前
|
数据采集 JSON 网络协议
Python编程异步爬虫——aiohttp的使用
Python编程异步爬虫——aiohttp的使用
87 0
|
4月前
|
数据采集 Linux 网络安全
python 爬虫遇到的aiohttp证书错误解决办法
python 爬虫遇到的aiohttp证书错误解决办法
202 0