【发布时间】:2019-06-10 15:02:05
【问题描述】:
我的代码以这种方式工作,但由于 for 循环,它的速度非常慢,你能帮我,使它与 aiohttp、asyncio 一起工作吗?
def field_info(field_link):
response = requests.get(field_link)
soup = BeautifulSoup(response.text, 'html.parser')
races = soup.findAll('header', {'class': 'dc-field-header'})
tables = soup.findAll('table', {'class': 'dc-field-comp'})
for i in range(len(races)):
race_name = races[i].find('h3').text
race_time = races[i].find('time').text
names = tables[i].findAll('span', {'class': 'title'})
trainers = tables[i].findAll('span', {'class': 'trainer'})
table = []
for j in range(len(names)):
table.append({
'Name': names[j].text,
'Trainer': trainers[j].text,
})
return {
'RaceName': race_name,
'RaceTime': race_time,
'Table': table
}
links = [link1, link2, link3]
for link in links:
scraped_info += field_info(link)
【问题讨论】:
-
为什么?
asyncio和aiohttp都不会为您的代码提供神奇的并行性,也不会加速 CPU 密集型任务。它们适用于异步编程。 -
这与您的问题无关,但您可以使用
for name, trainer in zip(names, trainers),而不是使用range(len(names)),并避免循环内的索引查找。
标签: python-3.x web-scraping python-asyncio aiohttp