AutoScraper简介
AutoScraper是一个智能、自动、快速且轻量级的Python网页抓取库。它的设计目标是让网页数据提取变得简单易用,即使对于没有编程经验的用户也能快速上手。与传统的网页爬虫不同,AutoScraper采用了机器学习的方法,通过用户提供的少量样本数据就能自动学习抓取规则,然后应用这些规则从相似的网页中提取更多数据。
这个项目的核心理念是让网页抓取变得自动化。用户只需提供一个URL和一些想要从该页面抓取的样本数据,AutoScraper就能学习抓取规则并返回相似的元素。这些数据可以是文本、URL或页面上任何HTML标签的值。一旦学习完成,用户就可以使用这个训练好的对象从新的URL中获取类似的内容或完全相同的元素。
AutoScraper的主要特点
-
智能学习: 通过少量样本数据自动学习抓取规则,无需手动编写复杂的选择器。
-
易用性: 简单的API设计,几行代码即可完成网页数据提取。
-
灵活性: 可以提取文本、URL或任何HTML标签的值。
-
自动化: 学习完成后可以自动从相似页面提取数据。
-
轻量级: 依赖少,安装简单,运行快速。
-
可扩展: 支持自定义请求参数,如代理、自定义头等。
-
模型保存: 可以保存训练好的模型以便后续使用。
安装方法
AutoScraper兼容Python 3,安装非常简单。您可以选择以下任一方式进行安装:
- 使用pip从PyPI安装最新版本:
pip install autoscraper
- 从GitHub仓库安装最新开发版本:
pip install git+https://github.com/alirezamika/autoscraper.git
- 从源代码安装:
python setup.py install
基本使用教程
让我们通过一个简单的例子来了解AutoScraper的基本用法。假设我们想要从Stack Overflow的一个问题页面中提取所有相关的问题标题。
from autoscraper import AutoScraper
url = 'https://stackoverflow.com/questions/2081586/web-scraping-with-python'
# 我们可以添加一个或多个候选项
# 您也可以在这里放入URL来检索URL
wanted_list = ["What are metaclasses in Python?"]
scraper = AutoScraper()
result = scraper.build(url, wanted_list)
print(result)
运行这段代码后,AutoScraper会学习如何提取类似的问题标题,并返回一个包含页面上所有相关问题标题的列表:
[
'How do I merge two dictionaries in a single expression in Python (taking union of dictionaries)?',
'How to call an external command?',
'What are metaclasses in Python?',
'Does Python have a ternary conditional operator?',
'How do you remove duplicates from a list whilst preserving order?',
'Convert bytes to a string',
'How to get line count of a large file cheaply in Python?',
"Does Python have a string 'contains' substring method?",
'Why is "1000000000000000 in range(1000000000000001)" so fast in Python 3?'
]
现在,您可以使用这个scraper
对象来获取任何Stack Overflow页面的相关主题:
scraper.get_result_similar('https://stackoverflow.com/questions/606191/convert-bytes-to-a-string')
高级用法
精确结果提取
有时您可能需要提取特定的数据,而不是相似的内容。例如,让我们从雅虎财经网站抓取实时股票价格:
from autoscraper import AutoScraper
url = 'https://finance.yahoo.com/quote/AAPL/'
wanted_list = ["124.81"]
scraper = AutoScraper()
# 我们也可以通过html参数传递HTML内容,而不是URL (html=html_content)
result = scraper.build(url, wanted_list)
print(result)
注意,由于页面内容会动态变化,您可能需要更新wanted_list
中的价格。
您还可以传递任何自定义的requests
模块参数。例如,如果您想使用代理或自定义头:
proxies = {
"http": 'http://127.0.0.1:8001',
"https": 'https://127.0.0.1:8001',
}
result = scraper.build(url, wanted_list, request_args=dict(proxies=proxies))
现在我们可以获取任何股票代码的价格:
scraper.get_result_exact('https://finance.yahoo.com/quote/MSFT/')
多元素提取
如果您想获取更多信息,只需将它们添加到wanted_list中即可。使用get_result_exact
方法将按照wanted_list中的确切顺序检索数据。
例如,假设我们想从GitHub仓库页面抓取"关于"文本、星标数和问题链接:
from autoscraper import AutoScraper
url = 'https://github.com/alirezamika/autoscraper'
wanted_list = ['A Smart, Automatic, Fast and Lightweight Web Scraper for Python', '2.5k', 'https://github.com/alirezamika/autoscraper/issues']
scraper = AutoScraper()
scraper.build(url, wanted_list)
保存和加载模型
训练好的模型可以保存下来供以后使用。保存模型:
# 给它一个文件路径
scraper.save('github-scraper')
加载模型:
scraper.load('github-scraper')
避免被封禁
在使用AutoScraper进行大规模数据抓取时,需要注意避免被目标网站封禁。以下是一些建议:
-
使用代理: AutoScraper支持代理实现。您可以使用免费代理或付费代理服务。
-
控制请求频率: 在抓取多个页面时,添加适当的延迟。
-
模拟真实用户行为: 随机化请求间隔,添加适当的User-Agent。
-
遵守robots.txt: 尊重网站的爬虫规则。
-
使用高级反爬虫绕过技术: 对于复杂的反爬虫机制,考虑使用专业的Web抓取API服务。
结语
AutoScraper为网页数据提取提供了一种简单而强大的解决方案。它的智能学习能力和易用性使得即使是编程新手也能快速上手进行网页抓取。然而,在使用过程中,请务必遵守网站的使用条款和法律法规,合理使用这一工具。
随着网页技术的不断发展,AutoScraper也在持续更新和改进。建议用户关注项目的GitHub页面以获取最新的功能和改进。同时,如果在使用过程中遇到任何问题,也可以在GitHub上提出issue寻求帮助。
总之,AutoScraper为数据分析师、研究人员和开发者提供了一个强大的工具,帮助他们更轻松地获取和利用网络上的公开数据。希望这篇文章能够帮助您更好地理解和使用AutoScraper,开启您的网页数据提取之旅。
Happy Coding! ♥️