1、反爬机制
门户网站,可以通过制定相应的策略或者技术手段,防止爬虫程序进行网站数据的爬取。
2、反反爬策略
爬虫程序可以通过指定相关的策略或者技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站的信息。
3、robots.txt协议:
君子协议。规定了网站中哪些数据可以被爬虫爬取,哪些数据不可以被爬取。
4、http协议
概念:就是服务器和客户端进行数据交互的一种形式
5、常用请求头信息
(1)User-Agent:表示请求载体的身份标识
(2)Connection:请求完毕后,是断开连接还是保持连接
6、常用响应头信息
(1)Content-Type:服务器响应回客户端的数据类型
7、https协议:安全的超文本传输协议。(进行数据加密的,而http中不存在数据加密)
8、加密方式
(1)对称密钥加密
(2)非对称密钥加密
(3)证书密钥加密
requests模块:Python 中原生的一款基于网络请求的模块,功能非常强大,简单便捷,效率极高。
作用:模拟浏览器发请求
(1)指定url
(2)发起请求:使用get方法发起get请求,该方法返回一个响应对象。参数url表示请求对应的url
(3)获取响应数据:通过调用响应对象的text属性,返回响应对象中存储的字符串形式的响应数据(页面源码数据)
(4)持久化存储
url的编码特性决定在百度中搜索的wd的关键字变为乱码。在requests中的乱码可以我们手动改为中文
2.4.1、处理url携带的参数:封装到字典中
2.4.2、UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器
UA检测: 门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份标识为某一款浏览器,说明该请求是一个正确的请求。
但是检测到请求的身份标识不是基于某一款浏览器的,则表示该请求为不正常的请求。
则服务器端就很有可能拒绝该请求。
User-Agent(请求载体的身份标识)
UA伪装:将对应的User-Agent封装到一个字典中
实战
(1)post请求(携带了参数)
(2)响应数据是一组json数据
根据response中返回的信息确定对应的数据包
1、
2、代码
运行之后的截图:
将生成的json文件进行在线的解析,如下图所示
点击查询之后,url没有变化,所以说明为Ajax请求
如下图所示,为POST请求
所含参数如下图:
2.7.1、自学分页的处理
首先我们需要考虑以下三个问题:
1)页面最大容量大于实际页面条目(该地区的餐厅少);
2)循环到了最后一个页面 ;
3)页面最大容量等于实际页面条目。
在单个页面中,我们要进行一个for循环解析json数据并将storeName逐个放进列表里面,这里大家可以自由发挥,用字典采集自己感兴趣的数据。单个页面又在大的while循环中,当判断Table1为空时,跳出循环,爬取结束。(没有学会)
response.status_code返回指示状态的数字(200正常,404未找到)
pageIndex表示要查询的页码,因此我们可以通过修改页码来爬取不同页数的数据;
pageSize:表示一页可以含有多少条数据。
最终版的代码
结果运行截图如下:
当然,也可以使用如下的方法进行爬取
原因一:
在复制url时,将?后面的内容删除了,会返回-1000
原因二:
param或data参数缺少
原因三:
动态参数被改为静态参数
url = ’http://125.35.6.84:81/xk/’
2、分析Ajax请求
首先确认是否请求当前URL会获取首页信息,如获取首页信息,会获得相应企业名称的超链接,获取超链接则可以获取相应详情信息。
可通过对当前URL发送请求进行验证。
分析两个详情页的URL http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=ff83aff95c5541cdab5ca6e847514f88 http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?id=827d2943f8734d5c848336066c97d2b6
发现URL:http://125.35.6.84:81/xk/itownet/portal/dzpz.jsp?域名相同
参数id不同,并且ID为对应企业的ID,并且发现与上述json串中ID相同
由此得出,ID值可以从首页对应的Ajax请求的json串中得出
域名和ID值可以拼接处一个完整的对应企业的详情数据的URL.
确认此为详情页的详情数据,刚才获取了这个Ajax请求的URL,可以对其发送请求。
分析两个别的详情页的Ajax请求的URL http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById
发现,所有post请求的URL 都一样,ID不一样
如果我们可以批量获取多家企业的ID后,可以使其拼接形成对应企业详情数据Ajax请求的URL。
1、聚焦爬虫:爬取页面中指定的页面内容
(1)指定url
(2)发起请求
(3)获取响应数据
(4)数据解析
(5)持久化存储
2、数据解析分类
(1)正则
(2)bs4
(3)xpath
3、数据解析原理概述
解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储
(1)进行指定标签的定位
(2)标签或者标签对应的属性中存储的数据值进行提取(解析)