установить asyncio с getRequests - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь заставить asyncio работать с моим веб-мастером.Я уже работал до этого, но когда я запускаю его сегодня, set_query не возвращает строчку

async def set_query(company):


    with ThreadPoolExecutor(10) as executor:
        loop = asyncio.get_event_loop()

        #Create Query
        query = format_text(company)
        page = get(query)
        soup = BeautifulSoup(page.content,  'html.parser')
        #Get adress etc as string
        try:
            location = soup.find_all('address')[0].text
        except:
            location = soup.find_all('p')[0].text
        if "Din sökning på" in location or "Ingen träff på" in location:
            return

    return  location

def scrape():
    #Companies to scrape
    companies = getData()
    #Get Page
    count = 0
    for company in companies:
        try:
            location = set_query(company)
            print(location)
        except:
            print("")

        corp.update({company:get_adress(location)})
        save_to_excel()

def start_download():
    loop = asyncio.get_event_loop()

    future = asyncio.ensure_future(scrape())
    loop.run_until_complete(future)

Ожидаемый результат - передать местоположение, возвращенное из set_query, в get_adress, но оно не передается в строке,сообщение об ошибке от get_adress "Это исключение, объект сопрограммы не имеет атрибута" replace ""

1 Ответ

1 голос
/ 26 июня 2019

Ваш код пытается вызвать асинхронно сопрограмму set_query(company) синхронно.
Сопрограмма является ожидаемым объектом.

Сделайте ваш 1011 * сопрограммой, которая будет ожидать результата от другой сопрограммы set_query(company):

...

async def scrape():
    ...
    location = await set_query(company)

Более того, asyncio.ensure_future() требует Future/Task экземпляр в качестве основного аргумента: https://docs.python.org/3/library/asyncio-future.html#asyncio.ensure_future

...