AutoScraper:适用于Python的一款智能、自动、快速、轻量级的网络抓取工具
这个项目是为使网络抓取变得更加简单而设计的。 它获取一个网址或网页的HTML内容和我们想从该页面抓取的数据样本列表。 这些数据可以是文本、网址或该页面的任何HTML标签值。 它学习抓取规则并返回相似的元素。然后,您可以使用这个学习到的对象配合新网址获取类似内容或这些新页面的相同元素。
安装
它兼容Python 3。
- 使用pip从git代码库安装最新版本:
$ pip install git+https://github.com/alirezamika/autoscraper.git
- 从PyPI安装:
$ pip install autoscraper
- 从源码安装:
$ python setup.py install
如何使用
获取相似结果
假如我们想获取Stack Overflow页面中所有相关的文章标题:
from autoscraper import AutoScraper
url = 'https://stackoverflow.com/questions/2081586/web-scraping-with-python'
# 我们可以在这里添加一个或多个候选项。
# 您也可以在此处放入网址以获取网址。
wanted_list = ["What are metaclasses in Python?"]
scraper = AutoScraper()
result = scraper.build(url, wanted_list)
print(result)
输出如下:
[
'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内容而不是网址(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/')
您可能还想获取其他信息。 例如,如果您也想获取市值,可以将其附加到想要的列表中。通过使用 get_result_exact
方法,它会按想要列表中的相同顺序获取数据。
另一个例子: 假如我们想抓取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('yahoo-finance')
加载方法如下:
scraper.load('yahoo-finance')
教程
- 查看 这个gist 以了解更多高级用法。
- AutoScraper和Flask:在不到5分钟内从任何网站创建API
问题
如果您在使用该模块时遇到任何问题,可以随时提出问题。