djejs 2024-05-16 22:17 采纳率: 0%
浏览 3

aiohttp连接超时

我想写一个对日本亚马逊网站的爬虫(需要翻墙),用aiohttp时只报不能连接,ssl:fault信号灯超时的错误。网上能找到的办法已经全部试了一遍,设置超时时间,ssl=False等忽略ssl的方法均无效,有没有佬看看是什么原因,下面是我的测试代码



import aiohttp
import asyncio

async def fetch(url):
    async with aiohttp.ClientSession( ) as session:
        async with session.get(url) as response:
            return await response.text()


async def main():
    urls = ['https://www.amazon.co.jp/-/zh/gp/browse.html?node=2230006051&ref_=nav_em__fshn_gane_lf_0_2_12_2','https://www.amazon.co.jp//-/zh/gp/browse.html?node=2230005051&ref_=nav_em__fshn_gane_mf_0_2_12_3','https://www.amazon.co.jp//-/zh/gp/browse.html?node=2230804051&ref_=nav_em__fshn_gane_kf_0_2_12_4']
    tasks = [fetch(url) for url in urls]
    results = await asyncio.gather(*tasks)
    for result in results:
        print(result)


loop = asyncio.get_event_loop()
loop.run_until_complete(main())
  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-05-16 22:29
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:为什么我的对日本亚马逊网站的爬虫在使用aiohttp时只报不能连接,ssl:fault信号灯超时的错误? 回答: 这个问题可能由多个原因引起,以下是一些可能的解决办法: 1.确认是否翻墙成功:在使用翻墙工具时,确保翻墙成功,否则可能无法连接到特定网站。可以使用其他工具来测试翻墙是否成功。 2.检查代码:检查一下代码中的urls是否正确,并且确保填写的是能够连接的网址。还可以加入异常处理代码,如果请求出现异常,打印出异常信息,方便调试。 3.检查ssl认证:该错误通常是因为某些ssl证书无法被识别或者是认证失败。设置ssl=false可能无效,需要在代码中设置合适的ssl认证参数。以下是一个设置参数的例子:
    async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session:
    

    4.检查网络连接:查看网络连接是否正常,有可能是因为网络原因导致无法连接,可以通过ping命令或者其他网络工具检查网络连接是否正常。 以下是经过修改后的代码:

    import aiohttp
    import asyncio
    async def fetch(url):
        async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session:
            async with session.get(url) as response:
                return await response.text()
    async def main():
        urls = ['https://www.amazon.co.jp/-/zh/gp/browse.html?node=2230006051&ref_=nav_em__fshn_gane_lf_0_2_12_2',
                'https://www.amazon.co.jp//-/zh/gp/browse.html?node=2230005051&ref_=nav_em__fshn_gane_mf_0_2_12_3',
                'https://www.amazon.co.jp//-/zh/gp/browse.html?node=2230804051&ref_=nav_em__fshn_gane_kf_0_2_12_4']
        tasks = [fetch(url) for url in urls]
        results = await asyncio.gather(*tasks)
        for result in results:
            print(result)
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())
    

    在代码中,我们添加了ssl=False,通过TCPConnector实例将其传递给ClientSession的参数中,这样我们就能够忽略ssl的验证。同时,使用async with语句确保资源得到自动的释放,避免资源泄漏的可能性。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月16日

悬赏问题

  • ¥66 换电脑后应用程序报错
  • ¥50 array数据同步问题
  • ¥15 pic16F877a单片机的外部触发中断程序仿真失效
  • ¥15 Matlab插值拟合差分微分规划图论
  • ¥15 keil5 target not created
  • ¥15 C/C++数据与算法请教
  • ¥15 怎么找志同道合的伙伴
  • ¥20 如何让程序ab.eXe自已删除干净硬盘里的本文件自己的ab.eXe文件
  • ¥50 爬虫预算充足,跪巨佬
  • ¥15 滑块验证码拖动问题悬赏