zhangli742 发表于 2021-6-11 00:29:51

异步爬取信息老是被封IP ,请问怎么操作可以降低被封的概率??

想用异步爬取 www.kuaidaili.com的免费代理ip 和一个漫画网站的所有漫画,但是每次运行程序,爬了几条之后就被封了,请问大佬要怎么调整发送频率? 这是代码

async def get_ip(session,page):
    #访问目标网页获取html信息
    url = f'https://www.kuaidaili.com/free/inha/{page}/'
    async with session.get(url) as resp:
      text = await resp.text()
      #解析信息
      element = etree.HTML(text)
      parse_list = element.xpath('//*[@id="list"]/table/tbody/tr')
      ip_list = []
      for parse in parse_list:
            dic = {}
            ip_name = parse.xpath('./td/text()')
            port_name = parse.xpath('./td/text()')
            tpye_name = parse.xpath('./td/text()')
            dic = ip_name + ':' + port_name
            ip_list.append(dic)

async def main():
    async with aiohttp.ClientSession() as session:
         task =
         await asyncio.wait(task)

if __name__ == '__main__':
    asyncio.get_event_loop().run_until_complete(main())

南归 发表于 2021-6-11 10:58:32

换个好用点的代理吧

笨鸟学飞 发表于 2021-6-11 11:06:36

1、代理池。池中代理可用数量不足,则再换过可用代理
2、加延迟。不过会降低效率
3、每次爬取更换IP(代理)和浏览器UA标志是最优的办法

foxiangzun 发表于 2021-6-11 23:05:50

通常的方法是,用 time 库中的 time.sleep() 方法,让爬取的动作暂停,暂停的时间可以再加一个 random 库下的 randint 函数,取一个时间范围(单位:秒)

import time
import random

'''
此处爬虫代码不做列举
'''
#取1到15之间的随机整数
sleep_second = random.randint(1, 15)
#让爬虫暂停若干秒
time.sleep(sleep_second)

zhangli742 发表于 2021-6-13 21:42:59

笨鸟学飞 发表于 2021-6-11 11:06
1、代理池。池中代理可用数量不足,则再换过可用代理
2、加延迟。不过会降低效率
3、每次爬取更换IP(代 ...

谢谢指点
页: [1]
查看完整版本: 异步爬取信息老是被封IP ,请问怎么操作可以降低被封的概率??