python 有没有一种方法可以敏捷化我的网页抓取?

zrfyljdw  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(118)

我试图通过从网站上抓取数据(使用BeautifulSoup)来补充Pandas Dataframe 。
由于这个网站问我是否是人类,我需要使用代理来绕过这个-为此我使用Scraper API。我组织我的代码在一个循环,因为我需要这样做~1600次访问网站内的特定路线,以获得数据:

url = 'https://www.example.com/'

for index, row in df.iterrows():

    url_date = url + str(row.date)
    payload = {'api_key': 'a_key', 'url': url_date}
    response = requests.get('http://api.scraperapi.com', params=payload)
    soup = BeautifulSoup(response.content, 'html.parser' )
    df.at[row,'column_name'] = soup.find("div", {"class": "a class"}).get_text(strip=True)[-2:]

但是,有这么多的url要检查,这段代码运行起来真的很慢,我这样做对吗?

xqk2d5yq

xqk2d5yq1#

因为我对网页抓取还是个新手,所以我不太清楚这个解决方案的工作原理,但我希望我能给你指出一个可能的解决方案。
您可以使用async/await多线程技术进行多个并行调用,而无需首先等待响应。
以异步方式编写的代码使操作能够并发执行,而不是按顺序执行,从而在发出多个网络请求或执行其他I/O密集型任务时提高性能。
多线程处理是提高代码性能的另一种方法。线程是程序中单独的执行上下文,多个线程可以在多核计算机上并行运行。
异步是I/O密集型操作(如网络请求)的理想选择,而线程更适合计算成本高的CPU密集型任务。
要了解有关此方法的更多信息,请访问:This John Watson Web Scraping Video

相关问题