搜索引擎便是我们最常接触的网络爬虫,如:百度,谷歌,bing等。
动态网站和静态
相比于静态网站(所有内容都能在网页内找到),动态网站有大量图片,视频素材
但过于复杂的动态页面会给搜索引擎带来困扰,对于想被搜索到的信息会引入静态网站,即SEO(search engine optimization, 搜索引擎优化)
移动应用
一般移动应用的信息无法通过网页搜索到。(百度搜不到抖音的短视频)
定向爬虫
对于静态页面:只需根据链接的内容、关键字等信息决定下一个网页的抓取。针对性极强,找到遍历方式即可。
移动应用:分析数据来源的API
反反爬虫
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
User Agent是标识请求的浏览器身份的,网站常用这个参数来分辨爬虫。如豆瓣网,当请求headers中没带User Agent时,返回404.
说明:浏览器在发送请求时会带上请求头即Request Headers,但是使用Python爬虫框架发送网络请求时不会有Request Headers,根据这一特点,网站可以识别是真实的网络的请求和爬虫操作从而进行反爬虫行动。所以在此次探索中,未免遇到这种反爬行为,我们在爬取过程中一律带上Request Headers.
客户端渲染(前端渲染):
在服务端放了一个html 页面,里面有
客户端发起请求,服务端把页面(响应的是字符串)发送过去,客户端从上到下依次解析,如果在解析的过程中,发现ajax请求,再次像服务器发送新的请求,客户端拿到ajax 响应结果,模板引擎渲染。过程至少和服务端发起两次请求
商品评论列表客户端渲染,访问网页的时候服务器将网页框架返回给客户端,在与客户端交互的过程中通过异步ajax技术传输数据包到客户端,呈现在网页上,爬虫直接抓取的话信息为空
价格做了反爬,这个反爬大多数是通过js加载的,自认而然的去看js
作者:知乎用户
链接:https://www.zhihu.com/question/24582124/answer/29379267
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。// 获得数字价格
var getPriceNum = function(skus, $wrap, perfix, callback) {skus = typeof skus === 'string' ? [skus]: skus;$wrap = $wrap || $('body');perfix = perfix || 'J-p-';$.ajax({url: 'http://p.3.cn/prices/mgets?skuIds=J_' + skus.join(',J_') + '&type=1',dataType: 'jsonp',success: function (r) {if (!r && !r.length) {return false;}for (var i = 0; i < r.length; i++) {var sku = r[i].id.replace('J_', '');var price = parseFloat(r[i].p, 10);if (price > 0) {$wrap.find('.'+ perfix + sku).html('¥' + r[i].p + '');} else {$wrap.find('.'+ perfix + sku).html('暂无报价');}if ( typeof callback === 'function' ) {callback(sku, price, r);}}}});
};
scrapy框架
- 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
- 明确目标 (编写items.py):明确你想要抓取的目标
- 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
- 存储内容 (pipelines.py):设计管道存储爬取内容
通过xpath 方法,输入的 xpath 规则定位到相应 html 标签节点爬取书名,作者,价格等信息。
其中价格从js出来,所以通过http://p.3.cn/prices/mgets?skuIds=这个接口获得的
在network中搜索价格信息4799,看到两个结果的url的网址带有“price”
打开右边的mgets
得到api
springboot
1.Dao层:全称Data Access Object。Dao层比较底层,负责与数据库打交道具体到对某个表、某个实体的增删改查
2.Service层:又叫服务层或业务层,封装Dao层的操作,使一个方法对外表现为实现一种功能,例如:网购生成订单时,不仅要插入订单信息记录,还要查询商品库存是否充足,购买是否超过限制等等。
3.Controller层:业务控制层,负责接收数据和请求,并且调用Service层实现这个业务逻辑。
Controller层像是一个服务员,他把客人(前端)点的菜(数据、请求的类型等)进行汇总什么口味、咸淡、量的多少,交给厨师长(Service层),厨师长则告诉沾板厨师(Dao 1)、汤料房(Dao 2)、配菜厨师(Dao 3)等(统称Dao层)我需要什么样的半成品,副厨们(Dao层)就负责完成厨师长(Service)交代的任务。不知道这个比喻是否合适。