Я уже написал некоторый параллельный код для веб-шифрования с синтаксисом asyncio, aiohttp и async / await. В этой ситуации я собрал URL-список всех веб-страниц, которые меня заинтересовали, и отправил его на событие l oop, более или менее в этом примере кода:
futures = [asyncio.ensure_future(fetch(url,session)) for url in URLlist]
data_list=[[data[i] for i in range(len(data))] for data in await asyncio.gather(*futures)]
Теперь я попробовал очистить другой веб-сайт, где я не могу (или, по крайней мере, не знаю, как) извлечь urlist перед началом анализа. Глядя на пример Scrapy на их главной странице Я эмулировал их функцию follow (используемую для извлечения URL-адреса nextpage для подачи сканера) с помощью рекурсии следующим образом:
def parse (url):
html=requests.get(url)
soup = BeautifulSoup(html.content,"html.parser")
#... code to extract post information...
nextpage = soup.select_one('a.blog-pager-older-link')
if nextpage is not None:
nexthref = nextpage.get('href')
parse(nexthref)
It мне кажется, что используется тот же лог c, что и в Scrapy: вам нужен запрос GET (ожидание ввода / вывода) -> html синтаксический анализ -> найти в содержимом href url -> recursion . Но Scrapy (я не знаю много об этом, поэтому могу ошибаться) рекламируется как нативная библиотека одновременно.
Но как он может быть параллельным, если это необходимо (по крайней мере, в примере в их основной страница) ждать запроса ввода-вывода перед доступом к URL следующей страницы? Для той же логики c Я не нахожу способ сделать мой код асинхронным.
Может ли кто-нибудь с большим пониманием этого вопроса дать мне какой-либо совет, если возможно сделать его асинхронным / параллельным, и если это Пример Scrapy истинный asyn c или нет?
Здесь кажется, что они делают asyn c фазу обработки (извлечения) кода, но не запрос ( ПОЛУЧИТЬ) фаза действительно замедляет код?