有一种方法来灵活地我的网页抓取?



我正试图通过从网站(使用BeautifulSoup)抓取数据来补充Pandas数据框架。

因为这个网站问我是否是人类,我需要使用代理来绕过这个-为此我使用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要检查,这段代码运行起来真的很慢。我这样做对吗?

由于我对网页抓取也很陌生,所以我不完全知道解决方案的工作原理,但我希望我可以为您指出一个潜在的解决方案。

可以使用async/await多线程或进行多个并行调用而不首先等待响应的技术。

以异步方式编写的代码使操作可以并发执行,而不是顺序执行,从而在进行多个网络请求或执行其他I/o密集型任务时提高性能。

多线程是另一种提高代码性能的方法。线程是程序中单独的执行上下文,多个线程可以在多核计算机上并行运行。

异步是理想的I/o绑定操作,如网络请求,而线程更适合于计算昂贵的cpu绑定任务。

要了解更多关于这种方法,您可以访问:这个John Watson网页抓取视频