簡體   English   中英

使用Python結合asyncio進行Web Scraping

[英]Web Scraping with Python in combination with asyncio

我在python中編寫了一個腳本來從網頁上獲取一些信息。 如果從asyncio中取出代碼,代碼本身就會運行得很完美。 但是,當我的腳本同步運行時,我想讓它通過異步過程,以便它在盡可能短的時間內完成任務,從而提供最佳性能,而且顯然不是阻塞方式。 因為我沒有使用過這個asyncio庫,所以我很困惑如何使它成為一個可行的。 我試圖在asyncio進程中使用我的腳本,但它似乎不對。 如果有人伸出援助之手來完成這件事,我真的很感激他。 謝謝你的提前。 這是我錯誤的代碼:

import requests ; from lxml import html
import asyncio

link = "http://quotes.toscrape.com/"

async def quotes_scraper(base_link):
        response = requests.get(base_link)
        tree = html.fromstring(response.text)
        for titles in tree.cssselect("span.tag-item a.tag"):
            processing_docs(base_link + titles.attrib['href'])

async def processing_docs(base_link):
        response = requests.get(base_link).text
        root = html.fromstring(response)
        for soups in root.cssselect("div.quote"):
            quote = soups.cssselect("span.text")[0].text
            author = soups.cssselect("small.author")[0].text
            print(quote, author)


        next_page = root.cssselect("li.next a")[0].attrib['href'] if root.cssselect("li.next a") else ""
        if next_page:
            page_link = link + next_page
            processing_docs(page_link)

loop = asyncio.get_event_loop()
loop.run_until_complete(quotes_scraper(link))
loop.close()

在執行時,我在控制台中看到的是:

RuntimeWarning: coroutine 'processing_docs' was never awaited
  processing_docs(base_link + titles.attrib['href'])

您需要使用await調用processing_docs()

更換:

processing_docs(base_link + titles.attrib['href'])

有:

await processing_docs(base_link + titles.attrib['href'])

並替換:

processing_docs(page_link)

有:

await processing_docs(page_link)

否則它會嘗試同步運行異步函數並讓人心煩意亂!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM