首页 > 解决方案 > Scraper 不会返回所有图像。认为这是因为它不是异步的。如何使 for 循环在一个范围内异步工作?

问题描述

我有一个 Python 脚本,它应该从网站上抓取图像。但由于某种原因,它不会返回所有图像。我怀疑是因为 for 循环不是异步的。但是,如何在定义的范围内使用带有 for 循环的异步函数?

这是代码:

import requests
from bs4 import BeautifulSoup
from os.path  import basename

def getdata(url): 
    r = requests.get(url) 
    return r.text

for i in range(1, 80):
    string_i = str(i)
    htmldata = getdata("https://www.coingecko.com/en?page=" + string_i) 
    soup = BeautifulSoup(htmldata, 'html.parser')
    for item1 in soup.select('.coin-icon img'):
        link = item1.get('data-src').replace('thumb', 'thumb_2x')
        raw_name = item1.get('alt')
        name = raw_name[raw_name.find('(') + 1:-1]
        with open(basename(name + '.png'), "wb") as f:
            f.write(requests.get(link).content)

标签: pythonweb-scrapingbeautifulsouppython-requestsscreen-scraping

解决方案


我发现我可以简单地使用模块中的time.sleep()函数通过在代码的开头和 循环的结尾time添加来实现异步。import timetime.sleep(1)


推荐阅读