异步爬取信息老是被封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()) 换个好用点的代理吧 1、代理池。池中代理可用数量不足,则再换过可用代理
2、加延迟。不过会降低效率
3、每次爬取更换IP(代理)和浏览器UA标志是最优的办法 通常的方法是,用 time 库中的 time.sleep() 方法,让爬取的动作暂停,暂停的时间可以再加一个 random 库下的 randint 函数,取一个时间范围(单位:秒)
import time
import random
'''
此处爬虫代码不做列举
'''
#取1到15之间的随机整数
sleep_second = random.randint(1, 15)
#让爬虫暂停若干秒
time.sleep(sleep_second) 笨鸟学飞 发表于 2021-6-11 11:06
1、代理池。池中代理可用数量不足,则再换过可用代理
2、加延迟。不过会降低效率
3、每次爬取更换IP(代 ...
谢谢指点
页:
[1]