Я пытаюсь извлечь некоторую информацию из списка URL-адресов и хочу сделать это асинхронно, чтобы сэкономить время. Я могу получить информацию, которую я хотел бы, когда я делаю это синхронно, и соответствующая часть этого кода, по существу, такова:
links = [...] #list of links
for link in links:
source_race = requests.get(link).text
soup_race = BeautifulSoup(source_race,'lxml')
contestant_names = []
for contestants in soup_race.find_all('div',attrs={'data-automation-id':'racecard-outcome-name'}):
contestant_names.append(contestants.text.replace('\xa0',' '))
Это возвращает мне список конкурирующих имен, который я хочу.
Теперь, когда я пытаюсь сделать это асинхронно, я тестирую его на предварительном этапе, используя функцию печати, например:
reqs = (grequests.get(link) for link in links)
resp = grequests.map(reqs)
for r in resp:
soup = BeautifulSoup(r.text, 'lxml')
results = soup.find_all('div',attrs={'data-automation-id':'racecard-outcome-name'})
print(results)
, но я не получаю текстовые элементы , Я просто получаю полный список всех этих деталей на этой странице. Результат выглядит так (я не смог захватить весь вывод, но это длинный список, содержащий всю необходимую мне информацию, но я не могу извлечь нужные текстовые элементы c, которые я обвел, которые являются просто именами и числом в скобках):
при попытке чтобы поставить print(results.text)
, я получаю следующую ошибку:
, когда я меняю свой код выше на find
вместо find_all
и используйте print(results.text)
. Я получаю именно то, что я ожидал (и хотел бы), а именно:
Мне просто нужен способ иметь все имена бегунов распечатаны.
Я новичок в асинхронном веб-сканировании (и в веб-сканировании в целом), поэтому мне очень жаль, если что-то из этого неясно.