在数据科学领域,数据是构建机器学习模型和进行分析的基础。经常需要从数据库、特定网页或社交媒体中收集数据,以发现模式或进行情感分析。无论收集数据的目的是什么,从网络上收集信息——即网络爬虫——是一项可能非常繁琐但必要的任务,以实现项目目标。
作为一名数据科学家,网络爬虫是一项必须掌握的关键技能。需要寻找有用的数据,收集和预处理数据,以确保结果是有意义和准确的。在深入探讨可以帮助数据提取活动的工具之前,让确认这项活动是否合法,因为网络爬虫一直是一个灰色的法律领域。2020年,美国法院完全合法化了公开可用数据的网络爬虫。这意味着,如果在网上找到了信息(例如维基百科文章),那么抓取这些数据是合法的。
尽管如此,在进行网络爬虫时,请确保:
只要不违反上述条款,网络爬虫活动就会在法律允许的范围内。
可能已经使用过BeautifulSoup和requests来收集数据,并使用pandas进行分析。本文将介绍五种不包括BeautifulSoup的免费网络爬虫工具,帮助为即将到来的项目收集数据。
Common Crawl的创建者创建这个工具是因为他们认为每个人都应该有机会探索和分析周围的数据,并发现有用的见解。他们为任何渴望探索和发现新趋势的人提供免费的高质量数据,这些数据以前只对大型组织和研究机构开放。可以无后顾之忧地使用这个工具,无论是学生、数据科学的新手,还是喜欢探索见解的热心人,这个工具都会有所帮助。他们提供原始网页数据和文字提取作为开放数据集,并为教授数据分析的教师提供资源,以及为非代码使用案例提供帮助。
访问网站
了解更多关于使用数据集和抓取数据的方法。
Crawly是另一个选择,特别是如果只需要从网站提取简单数据,或者如果喜欢以CSV格式提取数据,这样就可以在不写任何代码的情况下进行分析。用户需要输入一个URL,电子邮件地址以发送提取的数据,所需数据的格式(在CSV或JSON之间选择),然后,提取的数据就会在收件箱中供使用。
可以使用JSON数据,并使用Pandas和Matplotlib或任何其他编程语言进行分析。如果是数据科学和网络爬虫的新手,不是程序员,这个工具很好,但也有局限性。可以提取的HTML标签有限,包括标题、、图片URL和发布者。
Content Grabber是一个灵活的工具,如果喜欢抓取网页而不想指定其他参数,用户可以使用它们的简单GUI。尽管如此,它还是提供了完全控制提取参数的选项以自定义。用户可以安排从网上自动抓取信息,这是它的优势之一。如今,都知道网页经常更新,因此频繁提取内容会很有用。
它提供各种格式的提取数据,如CSV、JSON到SQL Server或MySQL。
ParseHub是一个功能强大的网络爬虫工具,任何人都可以免费使用。它提供安全、准确的数据提取,只需点击一下即可。用户还可以设置抓取时间,以保持数据的相关性。
它的一个优势是它可以轻松抓取更复杂的网页。用户可以指定指令,如搜索表单、登录网站以及点击地图或图片以收集数据。用户还可以输入各种链接和关键词,它在几秒钟内提取相关信息。最后,用户可以使用REST API以CSV或JSON格式下载提取的数据。用户还可以将收集到的信息导出为Google表格或Tableau。
这是列表中的最后一个抓取工具。它有一个网络爬虫API,可以处理即使是最复杂的JavaScript页面,并将它们转换为原始HTML供用户使用。它还提供了一个特定的API,用于使用Google搜索抓取网站。
可以使用这个工具的三种方式之一:
这个工具提供免费计划,包括1000个积分和付费计划,用于无限使用。
在ScrapingBee网站上注册免费计划,将获得1000个免费API请求,这应该足够学习和测试这个API。
现在转到仪表板并复制稍后在本指南中需要的API密钥。ScrapingBee现在提供多语言支持,允许直接在应用程序中使用API密钥。
因为Scraping Bee支持REST API,所以它适合任何编程语言,包括CURL、Python、NodeJS、Java、PHP和Go。对于更多的抓取,将使用Python和Request框架,以及BeautifulSoup。使用PIP安装它们:
pip install requests
pip install BeautifulSoup
使用以下代码开始ScrapingBee网络API。正在使用URL和API密钥参数进行请求调用,API将响应目标URL的HTML内容。
import requests
def get_data():
response = requests.get(
url="https://app.scrapingbee.com/api/v1/",
params={
"api_key": "INSERT-YOUR-API-KEY",
"url": "https://example.com/", #要抓取的网站
},
)
print('HTTP Status Code: ', response.status_code)
print('HTTP Response Body: ', response.content)
get_data()
import urllib.parse
encoded_url = urllib.parse.quote("要抓取的URL")