如何在Python中使用Aiohttp解析带分页的网站?我不知道网站上实际上有多少页
我知道怎么用Requests库来做这个,只需要一个while True的循环,当我遇到空页面或者404错误时,就会跳出循环。不过用aiohttp的时候,我是用gather来处理的,当页面为空时,我就取消所有的任务,这样就会丢失那些还没完成的任务。
async def get_goods_from_pages(session, page):
url = f'https://somewebsite?page={page}'
async with session.get(url, headers=headers) as r:
soup = BS(await r.text(), 'lxml')
all_goods = soup.find_all('div', class_='js_category-list-item')
if all_goods:
for el in all_goods:
print(el)
else:
raise SomeError
# collect all tasks function
async def get_pages_info():
tasks = []
async with aiohttp.ClientSession() as session:
for page in range(1, 150):
task = asyncio.create_task(get_goods_from_pages(session, page))
tasks.append(task)
try:
group = asyncio.gather(*tasks)
await group
except Exception:
group.cancel()
我也试过用while True循环,并且用await来调用函数,但这样解析的速度非常慢。
0 个回答
暂无回答