刚开始学爬虫请教一下在座大神,拿到一个要爬取的网页之后怎么确定用什么方式爬取?比如请求有的用selenium有的用requests解析有的用xpath 有的用json该如何选择?或者说网页可以大体分为哪几类分别用什么方法?


一、如何选择requests和selenium?

首先有个基本认识:所有selenium能获取到的数据使用requests都可以获取到

那么为什么还要用selenium呢?

原因如下:

1、访问的介面有加密参数,而你不会破解。

2、介面太复杂,比如参数几十个,而你想省事,用selenium可能就是点击一下就完事了

3、想要获取的数据显示在一个页面上,但是如果通过介面请求的话,需要访问数个甚至几十个介面才行。这个时候用selenium让浏览器帮你请求这么多介面,然后把数据展示当页面上。我们只要轻松的处理一个页面就好了

那么什么情况下必须用requests呢?

其实没有必须的情景,或者我还不知道。不过用requests的优势有以下几点:

1.消耗资源少。selenium需要渲染页面,以及载入很多静态资源、执行很多JS代码。但这些对我们需要的数据没啥用处。用selenium打开一个网页耗费的资源可能是用requests请求一个网页源码的几百倍

2.依赖简单。虽然selenium也有无头模式,但安装使用都比较麻烦,特别是在linux环境下。但requests就很简单了

二、解析方式如何选择?

关于正则和Xpath的选择推荐:XPath与正则表达式在文本数据提取时该如何选择?

关于JSON的选择:如果页面是JSON样式,一般是使用JSON来解析的。但是,前提是你需要获取很多个栏位,如果仅仅是获取一两个栏位的话,还不如用正则省事。

三、网页如何分类?

额,这个问题好复杂。不会。


总的来说就是遇到山拆山,遇水搭桥。

首先网页抓取方式有以下几种情况和应对办法:

1、在登录的时候有的需要拉动滑块,或者点击字体和图片一类的操作,这种的呢你可以使用selenium 来过滑块这一关,至于图片点击一类的,可以先识别出来后点击,现在图片识别有现成的包这有个哥们写了流程写的很好你可以借鉴,如果觉得效果不好你就要自己训练模型来专门应对某些网站或某种类的的图片进行解析以提高准确率

python爬虫20 | 小帅b教你如何识别图片验证码?

mp.weixin.qq.com图标

2、当过了第一关之后,下来就是进入列表页或者详情页进行抓取,主要的抓取手段可以分为,直接构建请求在介面获取请求结果,如果是json的话那就方便了,直接结构化存储就完事了,做好栏位对应,或者可以在网页直接住区,那就是像什么 xpath pyquery bs4 正则一类的操作了,期中在这里还是建议不要用bs4那玩意效率低,其它的还行我现在用的是pyquery和xpath还有就是scrapy自带的解析器,如果遇到难搞的网站或者网页复杂的话,就直接模拟刘浏览器解决就完事了,不过现在好多网站都做了webdriver的检查和监控,因为模拟浏览器如:PhantomJS或者chrome等都有些参数跟正常浏览器有出入,是网站是可以辨识出你是不是爬虫的,所以还要研究一下混淆参数的问题

3、忘记了一点加一下:还有就是如何伪装请求,简单粗暴发就是使用完全一致的header头,搞一下cookie,再不行就上代理池就完事了~~~


你的看到你拿到的数据是什么样的,才能决定使用什么技术。

比如一般我用requests,但是发现下载下来的数据没有我要的栏位。分析js得知很多数据都是非同步载入进来的。非同步介面又很乱,难以分析。那么只能用模拟浏览器的方式了,不得已选择了selenium。

至于得到数据后xpath还是cssselector,这得看那个方便,或者你熟悉哪个语法。这里问题到不大,效率接近。

如果人家介面很规整,下下来纯纯的json数据,那就没必要用selenium了,直接爬介面就好了。当然xpath也用不到了,json就搞定了。


可以参考我之前的一个回答

想自学python爬虫建议买哪些书??

www.zhihu.com图标

当然是选择jvppeteer,一个框架全搞定


很少爬数据,偶尔用的基本都是json。


对方网页支持用json当然是模仿http消息直接获取完整的json格式数据简单,如果不支持个人是喜欢用模仿浏览器再用xpath来抓取


(刚入门的萌新,如有理解错误还请评论区纠正。)

我一开始也是这样,搞不懂应该怎么做。究其原因是没有基础,知识面不够广(至少连接到javascript比较好)。

Selenium 和requests 选哪种?如果技术够 绝对首选requests 效率高 速度快。

说到底他们两个都是获取数据的方式,而selenium 本质是个浏览器,等于你在操作一个浏览器,所以网页展示到你面前的数据和你自己打开的基本一致。

而requests 你至少需要了解get post,cookie headers。通过模仿浏览器所发出的请求来拿到源数据(这其中可能会有很多步的请求才能拿到最终完整数据)。

你现在可以搞明白一个网页是如何展示到你眼前的吗?如果不能,而且确实打算学爬虫,那学到js是不可避免的。(至少搞懂它怎么工作的)

Xpath 属于你拿到数据对数据进行筛取的一个工具,这个掌握一个就好了(我用的beautiful soup)

Json 属于一种数据格式而已,在你拿到一种有特定格式的数据后 用对应的包处理 会很容易,而且这种格式用的也很多。


推荐阅读:
相关文章