简介
. N% Q1 c* Z6 A, E& z8 ` AutoScraper 是使用 Python 实现的 Web 爬虫,兼容 Python 3,能快速且智能获取指定网站上的数据,这些数据可以是网页文本、URL 地址或者是其它 HTML 元素。另外,它还可以学习抓取规则并返回类似的元素。
1 F3 P) y4 N3 Z7 m! F. R1 z 下载安装 " M# S5 i& b+ Z$ q0 X3 ~7 y
项目的源码地址是:https://github.com/alirezamika/autoscraper
% _5 E$ V! g1 k/ Q( V/ {0 } 兼容 Python 3。可使用以下方法进行安装:9 Q6 X+ `2 G4 }) e8 Q* [2 ~+ I
(1)从git获取安装 $ pip install git+https://github.com/alirezamika/autoscraper.git 5 T H: D1 l. _6 I
(2)从PyPI获取安装 $ pip install autoscraper
; }0 }0 k4 n; C# J (3)下载源码后进行安装 $ python setup.py install" D3 |. I$ \- ~
简单使用
5 ~+ s- Q. p% U5 {8 H+ M 假设我们想在stackoverflow页面中获取所有相关的文章标题:! a3 A; ` n. |
from autoscraper import AutoScraper
url = 'https://stackoverflow.com/questions/2081586/web-scraping-with-python'
wanted_list = ["How to call an external command?"]
scraper = AutoScraper()
result = scraper.build(url, wanted_list)
print(result) 输出结果如下:
5 j% ~( W2 E2 u$ U [
'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?'
]抓取相似结果 6 V& w' ^. |8 a1 C. F
当你还想获取stackoverflow上其他页面中所有相关的文章标题,则可以直接通过get_result_similar方法获取:' n) N3 D. E3 h, b
scraper.get_result_similar('https://stackoverflow.com/questions/606191/convert-bytes-to-a-string') 两个页面的抓取结果为:* y- i2 M! W* X. `$ d6 |
; W5 v8 s5 m1 j, K' C3 `# Z( }. z, K: B
抓取确切结果
, P( r" l, M* b2 g5 l' F! W3 J 当你只想抓取某个确切的结果,可以使用get_result_exact方法,即从wanted_list中以完全相同的顺序检索数据:- M+ Y( A9 U8 g/ a7 t6 B7 v* X/ T; ~
scraper.get_result_exact('https://stackoverflow.com/questions/606191/convert-bytes-to-a-string') 比如抓取页面中排第2的相关文章标题,执行结果:6 d$ g/ { B; S1 Z
: }1 X; h# P3 H6 o
自定义请求模块参数
7 B# d6 Q. k2 F2 S7 Y 你还可以传递任何自定义请求模块参数。例如,你可能想使用代理或自定义头:7 {$ f/ Z A4 H/ b! `3 }
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))抓取多项信息 6 q' e7 u0 c* k8 v
假设我们想要抓取关于文本,Star的数量和Github回购页面的问题链接:
& @4 b) B/ [+ f* ?7 G+ N( I) j& o/ J 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) 执行结果为:
. |5 j& g+ ]+ l( ?# a4 f o; q
: {, d2 v9 k8 q+ M: C8 P7 `3 z 保存模型 " ]* A' ]% n) E& |$ P; {/ L
我们可以保存抓取的模型以便以后使用:* R, [ w" i. P9 z9 {" Q
# 指定保存的文件路径
scraper.save('stackoverflow')
# 调用方法:
scraper.load('stackoverflow') AutoScraper简单介绍就到这里了,如果你想使用更多的功能,详见官方主页了解。8 K- T6 J' x8 z9 a8 [
* c* q8 b) @+ g% z& n8 ^" i