零基础用爬虫爬取网页内容(详细步骤+原理)

零基础用爬虫爬取网页内容(详细步骤+原理)

网络上有许多用 Python 爬取网页内容的教程,但一般需要写代码,没有相应基础的人要想短时间内上手,还是有门槛的。其实绝大多数场景下,用 Web Scraper (一个 Chrome 插件)就能迅速爬到目标内容,重要的是,不用下载东西,也基本不需要代码知识。

在开始之前,有必要简单了解几个问题。

a、爬虫是什么?
自动抓取目标网站内容的工具。

b、爬虫有什么用?
提高数据采集效率。应该没有人想让自己的手指不停的重复复制粘贴的动作,机械性的事情,就应该交给工具去做。快速采集数据,也是分析数据的基础。

c、爬虫的原理是什么?

要了解这一点,需要先了解人类为什么能浏览网页。我们通过输入网址、关键字、点击链接等形式发送请求给目标计算机,然后将目标计算机的代码下载到本地,再解析/渲染成看到的页面。这就是上网的过程。

爬虫做的就是模拟这一过程,不过它对比人类动作飞快,且可以自定义抓取内容,然后存放在数据库中供浏览或下载。搜索引擎能够工作,也是类似原理。


但爬虫只是工具,要让工具工作起来,就得让爬虫理解你想要的是什么,这就是我们要做的事情。毕竟,人类的脑电波没法直接流入计算机。也可以说,爬虫的本质就是找规律。

Photo by Lauren Mancke on Unsplash

这里就以豆瓣电影 Top250 为例(很多人都拿这个练手,因为豆瓣网页规整),来看看 Web Scraper有多么好爬,以及大致怎么用。

1、在 Chrome 应用店里搜索 Web Scraper,然后点击「添加拓展程序」,这时就能在 Chrome 插件栏里看到蜘蛛网图标。

(如果日常所用浏览器不是 Chrome,强烈建议换一换,Chrome 和其他浏览器的差别,就像 Google 和其他搜索引擎的差别)


2、打开要爬的网页,比如豆瓣 Top250 的 URL 是 movie.douban.com/top250,然后同时按住 option+command+i 进入开发者模式(如果用的是 Windows,则是 ctrl+shift+i,不同浏览器的默认快捷键可能有不同),这时可以看到网页弹出这样一个对话框,不要怂,这只是当前网页的 HTML(一种超文本标记语言,它创建了 Web 世界的一砖一瓦)。



只要按照步骤 1 添加了 Web Scraper 拓展程序,那就能在箭头所示位置看到 Web Scraper,点击它,就是下图的爬虫页面。


3、依次点击 create new sitemap 和 create sitemap,创建爬虫,sitemap name 里随便填,只是为了自己辨认,比如就填 dbtop250(别写汉字、空格、大写字母)。start url 里一般复制粘贴要爬网页的 URL,但为了让爬虫理解我们的意图,最好先观察一下网页布局和 URL,比如 top250 采用的是分页模式,250 个电影分布在 10 个页面里,每页 25 个。

第一页的 URL 就是 movie.douban.com/top250
而第二页开始是 movie.douban.com/top250?
第三页是 movie.douban.com/top250?
...

只有一个数字略不一样,我们的意图是爬取 top250 的电影数据,所以 start url 里不能简单的粘贴 movie.douban.com/top250,而应该是 movie.douban.com/top250?[0-250:25]&filter=
注意 start 后面[ ] 里的内容,它代表每隔 25 是一个网页,爬取 10 个网页。

最后点击 Create sitemap,这个爬虫就算建好了。


(URL 里填 movie.douban.com/top250 也能爬,但没法让 Web Scraper 理解我们要爬的是 top250 所有页面的数据,它只会爬第一页的内容。)

4、建好爬虫之后的工作是重点,为了让 Web Scraper 理解意图,必须创建选择器,点击 Add new selector。


然后会进入选择器编辑页面,其实也是简单的点点点。它的原理是,几乎所有用 HTML 编辑的网页,构成元素都是一个个长得一样或差不多的方框(或者叫做容器),且每一个容器里的布局、标签也类似,越规整的页面越是统一,从 HTML 代码里也能看得出来。

所以,如果我们设定好了选择元素和顺序,爬虫就能照着设定自动模拟选择,也就能将数据整整齐齐的爬下来。在要爬取多种元素的情况下(比如爬豆瓣 top250 希望同时爬取排名、电影名、评分、一句话影评),可以先选容器,再依次选取容器内的元素。

如图所示,依次


5、第 4 步只是创建了容器的选择器,要爬取的东西,Web Scraper 还是没有理解,需要进一步在容器里选择我们想要的数据(电影排名、电影名、评分、一句话影评)。

完成第 4 步 Save selecting 后,会看到爬虫的根目录 root,点击创建的 container 那一栏。


看到根目录 root 后跟着 container,点击 Add new selector,创建子选择器。


再次进入 seletor 编辑页面,如下图所示,这次不一样的地方是,id 那里填我们对所要抓取元素的定义,随便写,比如先抓取电影排名,写个 number;因为排名是文本类型,Type 里选择 Text;这次只选取一个容器里的一个元素,所以 Multiple 不勾选。另外,选择排名的时候,不要选错地方了,因为你选啥爬虫就爬啥。然后一样点击 Done selecting 和 save selector。


这时候爬虫已经知道爬取 top250 网页里所有容器的影片排名。再以同样的方法,创建另外 3 个子选择器(注意是在 container 的目录里),分别爬取电影名、评分、一句话影评。

创建好后是这样的,这时所有选择器已经都已创建完,爬虫已经完全理解意图。



6、接下来的事就是让爬虫跑起来了,依次点击 sitemap dbtop250 和 scrape(抓取)


这时 Web Scraper 会让填写请求间隔时间和延迟时间,都保持默认的 2000 (单位是毫秒,即 2 秒)就好,除非网速特别快或特别慢,然后点击 Start sraping。



到了这里,会弹出一个新的自动滚动的网页,就是我们在创建爬虫时输入的 URL,大概一分钟左右,爬虫会工作完毕,弹窗自动消失(自动消失即代表爬取完毕)。



而 Web Scraper 页面也会变成这样



7、点击 refresh,即可预览爬虫成果:豆瓣电影 top250 的排名、影片名、评分、一句话影评。看看有没有问题。(比如有没有 null,有 null 说明对应的选择器没有选择好,一般页面越规整,null 就越少。遇到 HTML 不规整的网页,比如知乎,跑出 null 较多,可以返回选择器调整一下)



这时可以说是大功告成了,只要依次点击 sitemap dbtop250 和 Export date as CSV,即可将数据表以 CSV 的格式下载下来,之后想怎么用怎么用。


值得一提的是,浏览器抓取的内容,一般都保存在了 local starage 数据库里,这个数据库功能比较单一,并不支持自动排序。所以如果你没有安装额外的数据库并设置好,那么爬取下来的数据表会是乱序的。这种情况,一个解决办法是导入到 google sheet 再做清洗,另一个一劳永逸的办法是,安装额外的数据库,比如 CouchDB ,并在爬取数据之前,将数据保存路径更换为 CouchDB ,这时爬取数据,预览及下载下来,就是顺序的了,比如上面的预览图片。



这整个过程看起来可能麻烦,其实熟悉后很简单,这种小量级的数据,从头到尾二三分钟时间就 ok。而且像这种小量级数据,爬虫还没有充分体现出它用途。数据量越大,爬虫的优越性越明显。


比如爬取知乎各种话题的精选内容,可以同时爬取,20000 条数据也只要几十分钟。


自拍

如果看到这里,你觉得照上面这样一步步来还是费劲,有个更简单的方法:

通过 Import sitemap,将下面这段爬虫代码复制粘贴一下,导入进去,就可以直接开始抓取豆瓣 top250 的内容了。(它就是由上面的一系列配置生成的)

{"_id":"douban_movie_top_250","startUrl":[" movie.douban.com/top250?"],"selectors":[{"id":"next_page","type":"SelectorLink","parentSelectors":["_root","next_page"],"selector":".next a","multiple":true,"delay":0},{"id":"container","type":"SelectorElement","parentSelectors":["_root","next_page"],"selector":".grid_view li","multiple":true,"delay":0},{"id":"title","type":"SelectorText","parentSelectors":["container"],"selector":"span.title:nth-of-type(1)","multiple":false,"regex":"","delay":0},{"id":"number","type":"SelectorText","parentSelectors":["container"],"selector":"em","multiple":false,"regex":"","delay":0}]}



最后,这个文章只涉及 Web Scraper 与爬虫的冰山一角,不同网站风格不一样、元素布局不一样、自身爬取需求不一样,爬取方法也各不一样。

比如有的网站需要点击「加载更多」才会加载更多,有的网站下拉即加载,有的网页乱七八糟,有时候需要限定爬取数量(不然不断网爬虫就一直爬),有时候需要抓取二级、多级页面的内容,有时候要抓取图片,有时候要抓取隐藏信息等等。各种情况多的很,爬豆瓣 top250 只是入门体验版操作,只有了解爬虫原理、观察网站规律,才能真正用好 Web Scraper,爬取想要的东西。

题图 by Hal Gatewood on Unsplash

文章首发于公众号「步学无术」,作者微 m644003222

代做工资流水公司深圳薪资银行流水公司天津制作流水账单大连查工资流水单东莞薪资银行流水打印沧州银行对公流水湖州查询离职证明烟台入职工资流水报价潍坊工资银行流水打印台州代开车贷工资流水洛阳贷款银行流水办理宜春代开购房银行流水济宁收入证明模板淄博消费贷流水费用银川公司银行流水样本舟山企业银行流水开具廊坊制作签证银行流水太原银行流水电子版多少钱重庆做背调流水许昌工资流水单开具沧州入职流水查询代开签证银行流水咸阳制作转账银行流水珠海做企业流水打印威海办理入职银行流水肇庆在职证明打印洛阳企业贷流水图片鞍山开工资代付流水潮州工作收入证明开具宜昌代开房贷工资流水昆明车贷银行流水 多少钱香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

代做工资流水公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化