AutoScraper是一个自动化的爬虫工具,非常智能,而且使用简单便捷。AutoScraper 是使用 Python 实现的 Web 爬虫,兼容 Python 3,能快速且智能获取指定网站上的数据,在github上具有4.8K⭐️。github链接:https://github.com/alirezamika/autoscraper。
AutoScraper适合爬取反爬机制不强的页面,可以有效爬取数据。
下面开始介绍AutoScraper的使用过程。
1 安装
#autoscraper支持使用python3
# ①使用 pip 从 git 仓库安装最新版本
# pip install git+https://github.com/alirezamika/autoscraper.git
#②从PyPI安装(推荐)
#pip install autoscraper
#③下载源码安装
#python setup.py install
2 AutoScraper使用
我对AutoScraper用法进行分类,并进行实际实现,以链家二手房信息为例,读者可自行学习修改即可。
2.1 单信息抓取
from autoscraper import AutoScraper #导入
# 爬取的网址
url = 'https://bj.lianjia.com/ershoufang/'
# 输入想抓取的标题信息,此处以二手房发布信息标题为例
wanted_list = ["西山枫林一二期南排高楼层南北通透四居室"] #随便找一个当前页面的标题
#创建AutoScraper对象
scraper = AutoScraper()
#建立爬虫,并进行信息爬取
result = scraper.build(url, wanted_list)
print('结果数量:',len(result)) #返回结果数量与当前页面标题数量一致
print('返回结果:',result)
2.2 多信息抓取
2.2.1 第一种方法
from autoscraper import AutoScraper #导入
# 爬取的网址
url = 'https://bj.lianjia.com/ershoufang/'
# 输入想抓取的标题信息,此处以二手房发布信息标题和价格为例
wanted_list = ["西山枫林一二期南排高楼层南北通透四居室","745万"]
#创建AutoScraper对象
scraper = AutoScraper()
#建立爬虫,并进行信息爬取
result = scraper.build(url, wanted_list)
print("爬取结果:",result) #先返回全部的标题信息,再返回价格信息
这种方法爬取多标题信息,不容易对齐,因此介绍第二种方法。
2.2.2 第二种方法
from autoscraper import AutoScraper #导入
## 爬取的网址
url = 'https://bj.lianjia.com/ershoufang/'
# 输入想抓取的标题信息,此处以二手房发布信息标题和价格为例
wanted_dict = {'title': ["有燃气正规一居室,户型好,格局方正"],
'price': ['398万']}
#创建AutoScraper对象
scraper = AutoScraper()
#建立爬虫,并进行信息爬取
scraper.build(url=url, wanted_dict=wanted_dict)
result = scraper.get_result_similar(url=url, grouped=True) #抓取相似数据,参数grouped设置返回结果是字典形式,默认是False。
print('返回结果:')
print(result) #返回结果中rule_m3wz,rule_sgqv是规则名称,有可能同一种信息使用多种规则返回,选择其一即可。
将多种不同的返回结果分开方便利用DataFrame进行存储。
2.3 多页面抓取
当需要抓取多个页面,每个页面的布局相同,则爬取规则相同,保存设计的规则,然后应用到其它页面即可。
import pandas as pd
from autoscraper import AutoScraper #导入
## 爬取的网址
url = 'https://bj.lianjia.com/ershoufang/'
# 输入想抓取的标题信息,此处以二手房发布信息标题和价格为例
wanted_dict = {'title': ["有燃气正规一居室,户型好,格局方正"],
'price': ['398万']}
#创建AutoScraper对象
scraper = AutoScraper()
#建立爬虫,并进行信息爬取
scraper.build(url=url, wanted_dict=wanted_dict)
result = scraper.get_result_similar(url=url, grouped=True)
print("规则名称:",result.keys())
#返回结果中规则名称是随机生成的,一定注意,由于布局相同,所以其它页面的规则相同
#规则保存
scraper.keep_rules(['rule_4alo', 'rule_xt47']) #当一个标题给出多个规则时,选择一个规则
scraper.save('lianjie_rule')
#加载规则
lianjia_scraper = None
lianjia_scraper = AutoScraper()
lianjia_scraper.load('lianjie_rule')
df = pd.DataFrame()
#爬取多个页面
for n in range(1, 5):
url_template = f'https://bj.lianjia.com/ershoufang/pg1/{n}'
result = lianjia_scraper.get_result_similar(url=url_template, group_by_alias=True)
df = pd.concat([df, pd.DataFrame(result)])
print("返回结果:")
print(df)
AutoScraper还有一些其它的细节,比如可以使用get_result_exact进行爬取等,详细信息可参考autoscraper-examples.md。
如果有读者想要详细了解AutoScraper具体的代码,可以留言告知,作者将会出一期代码解读。