网页爬虫:零基础用爬虫爬取网页内容

八爪鱼大数据 八爪鱼大数据     2022-12-03     590

关键词:

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

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

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

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

c、爬虫的原理是什么?

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

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

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

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

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

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

2、打开要爬的网页,比如豆瓣 Top250 的 URL 是 https://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 就是https://movie.douban.com/top250
而第二页开始是 https://movie.douban.com/top250?start=25&filter=
第三页是 https://movie.douban.com/top250?start=50&filter=

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

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

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

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

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

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

如图所示,依次

在 id 栏里输入 container(容器)。Web Scraper 所以要输入东西的地方,都不要输入汉字。
在 Type(类型)的下拉选项里选择 Element(元素)。Web Scraper 的 Type 很多,可以满足不同网页类型、不同场景的爬虫需求。
勾选 Multiple(多选),因为要爬所有。
点击 Selector 里的 Select。
在网页里点击第一个方框(容器)。指针移到网页内容上时会自动显示不同大小的方框,方框框住整个电影所有信息时点击(边缘位置)。
同样点击第二个容器。这时可以看到当前网页所有电影都已被选择,因为 Web Scraper 理解了你要选择所有。
点击 Done selecting。选择完成,这时 Seletor 的第 4 个输入框里会自动填上 .grid_view li ,你要是能直接在输入框里写上 .grid_view li 也行。
最后点击 Save selecting。保存选择器。

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”:[“https://movie.douban.com/top250?start=0&filter=”],“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,爬取想要的东西。

python基础之爬虫:爬取小说,图片示例(代码片段)

一、用python里面的beautifulsoup爬取网页中的小说原来网页内容:http://www.jueshitangmen.info/tian-meng-bing-can-11.html#爬虫frombs4importBeautifulSoupfromurllib.requestimporturlopenhtml=urlopen('http://www.jues 查看详情

如何利用python爬取网页内容

参考技术A利用python爬取网页内容需要用scrapy(爬虫框架),但是很简单,就三步定义item类开发spider类开发pipeline想学习更深的爬虫,可以用《疯狂python讲义》 查看详情

爬虫基础——网页(代码片段)

前言  爬虫要爬取的信息主要来自于网页加载的内容,有必要了解一些网页的知识。  当我们在浏览器网址栏输入一个网址——URL,经过TCP/IP协议簇的处理,这个网址请求的信息就被发送到URL对应的服务器,接着... 查看详情

python第一条网络爬虫,爬取一个网页的内容(代码片段)

一、球赛结果预测代码部分函数测试。    二、用requests库函数访问搜狗网页20次。1importrequests2frombs4importBeautifulSoup3defgetHTMLText(self):4try:5r=requests.get(url,timeout=30)#如果状态不是200,引发异常6r.raise_for_status( 查看详情

python第一条网络爬虫,爬取一个网页的内容(代码片段)

一、球赛结果预测代码部分函数测试。    二、用requests库函数访问搜狗网页20次。1importrequests2frombs4importBeautifulSoup3defgetHTMLText(self):4try:5r=requests.get(url,timeout=30)#如果状态不是200,引发异常6r.raise_for_status( 查看详情

python爬虫能做啥

...络爬虫的编程语言,相比于其他静态编程语言,Python抓取网页文档的接口更简洁;相比于其他动态脚本语言,Python的urllib2包提供了较为完整的访问网页文档的API。此外,python中有优秀的第三方包可以高效实现网页抓取,并可用极... 查看详情

python爬取基础网页图片

...页面给客户端,当然也有其他数据类型的信息,这些就是网页内容。我们要做的就是解析这些信息,然后选择我们想要的,将它爬取下来按要求写入到本地。2.爬虫基本流程1.获取网页的响应的信息这里有两个常用的方法html=reques... 查看详情

怎么用python爬虫爬取可以加载更多的网页

就像百度图片,当加载了更多图片之后网页源码却没有发生变化,多加载的图片也不能爬取下来,这种情况该怎么处理?参考技术A这种情况我自己还没有试过,只是借助爬虫框架pyspider结合PhantomJS,这样就可以在python里面嵌入一些js代... 查看详情

网页爬虫小记:两种方式的爬取网站内容(代码片段)

此处进行简单的分类,对于普通的网页爬取内容,如果没有登录界面可以直接使用Jsoup的API进行爬取;如果网站是在打开目标也之前需要进行登录,此时需要先使用用户加密码实现登录获取Cookie然后进行登录;本文就第二种方式... 查看详情

python爬虫基础讲解(二十六):scrapy.spider(代码片段)

...网站。包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item)。换句话说,Spider就是您定义爬取的动作及分析某个网页(或者是有些网页)的地方。 查看详情

网页爬虫

 一.前言  近期要測试改动一个反爬虫代码,之前一直没接触过反爬虫,仅仅闻其声不见其人。  既然要反爬虫。肯定要理解爬虫的思维方式,见招拆招,只是遗憾的是仅仅要你想爬没啥爬不到的,比方控制下... 查看详情

python爬虫入门爬取豆瓣电影top250(代码片段)

...top250本次用re库实现爬取豆瓣电影top250的第一页,当网页换页的时候start参数会变,暂未实现爬取后续内容有些网页的信息不直接在网页源代码中显示,有些网页会在网页源代码显示,所以要先查看网页源代码文章目录p... 查看详情

python网络爬虫技巧小总结,静态动态网页轻松爬取数据

...今天就来总结下python爬虫抓站的一些实用技巧。 静态网页对于静态网页的爬虫不用多说大家也都知道,因为爬取静态网页非常的简单,只要用requests直接把html爬取下来然后用正则表达式匹配就可以了。 动态网页相对于静... 查看详情

python网络爬虫学习手记——爬虫基础

1、爬虫基本概念网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。--------百度百科简单的说,爬虫就是获取目标网页源... 查看详情

7-13爬虫入门之beautifulsoup对网页爬取内容的解析

通过beautifulsoup对json爬取的文件进行元素审查,获取是否含有p标签#-*-coding:utf-8-*-fromlxmlimporthtmlimportrequestsimportjsonimportreimportscrapyfrombs4importBeautifulSoup#通过beautifulsoup解析文档defbs4analysis(html_doc):soup=Be 查看详情

爬虫--1

Python非常适合用来开发网页爬虫,理由如下:1、抓取网页本身的接口相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁;相比其他动态脚本语言,如perl,shell,python的urllib包提供了较为完整的访问网页... 查看详情

认识爬虫

...虫:搜索引擎用的爬虫系统。一.目标:爬取所有网站的网页下载下来,存放到本地服务器里形成备份。二.抓取流程:a.首选选取一部分已有的url,把这些url放到待爬取队列。b.从队列里取出这些URL,然后解析DNS得到主机IP,然后去... 查看详情

python零基础入门爬虫原理与数据抓取-通用爬虫和聚焦爬虫(代码片段)

...Yahoo等)的重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。通用搜索引擎(SearchEngine)工作原理通用网络爬虫从互联网中搜集网页,采集 查看详情