1.爬虫三种分类:

通用爬虫:爬取整个页面的数据

聚焦爬虫:爬取经过筛选过滤后的数据,基于一张页面的局部内容.

增量式爬虫:爬虫监测网站更新后的数据,

 

2.什么是UA检测,如何破解?

UA检测:服务器会用来通过获取请求,通过请求获取请求头中的UA,通过判定UA的值,知道请求的载体身份标识.

 

将爬虫程序发起请求的信息,伪装成浏览器的请求

UA检测是一种反爬机制,反爬对应的是门户网站,

反反爬策略对应的是爬取程序,破解反爬机制的是反反爬策略

 

3.简述https的加密流程?

证书秘钥加密:服务器生成公私钥,服务器发送公钥给第三方证书认证机构,认证机构将公钥经过数字签名,作为防伪标识,证书和公钥都会返回给服务器,服务端再发送给客户端,,客户端通过公钥和数字签名验证加密之后,将加密之后的密文传给服务器.

 

4.什么是动态加载的数据?如何爬取动态加载的数据?

ajax可以动态加载数据,有时候某些东西不是所见即所得,可能是ajax发送的请求数据.

通过抓包工具捕获ajax请求的数据包,将数据包中的url包括参数获取之后,发送请求,返回json串

ajax一般返回的是json串,也可能是其他形式的请求.

 

5.requests模块中的get和post方法的常用参数及其作用?

url,data,params和headers

 

6.问题1,IP被封,这个用自己的热点

问题2,页码有问题?50页之后的有问题,通过try..except排除异常

 

 

7.化妆品生产许可信息管理系统服务

全局搜索:

小爬爬2.回顾_数据

选择随便一个包,按下ctrl+F搜索,搜索的内容如下图所示

 

小爬爬2.回顾_json_02

我们看到数据包,就是下图所示的位置:

小爬爬2.回顾_数据_03

最好的就是全局搜索,找到对应的搜索包

 

小爬爬2.回顾_数据_04

我们看到下图的全局参数:

小爬爬2.回顾_json_05

response指代的是响应的数据.

小爬爬2.回顾_json_06

上图是我们响应的json字符串,解析之后,我们看到下图的ID

小爬爬2.回顾_数据_07

 

 分析:

#搜索的地址:http://125.35.6.84:81/xk/
#Request URL: http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList
#Request Method: POST
# Content-Type: application/json;charset=UTF-8
#User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36

#Form Data #参数
# on: true
# page: 1
# pageSize: 15
# productName:
# conditionType: 1
# applyname:
# applysn:

 

 

分析:
(1)通过抓包工具检测出首页中的企业信息数据全部为动态加载
(2)通过抓包工具获取动态加载数据对应的ajax的数据包(url,请求参数)
(3)通过对步骤2的url请求后获取的响应数据中分析出有一个特殊的字段ID(每家企业都有一个唯一的ID值)
(4)从手动点击企业进入企业的详情页,发现浏览器地址栏中的url中包含了该企业的ID和固定的域名可以拼接成详情页的url
(5)发现详情页的企业详情信息对应的数据值是动态加载出来的.上述我们获取详情页中的url是无用的.
(6)通过抓包工具的全局搜索的功能,可以定位到企业详情信息对应的ajax数据包(url,请求参数),对应的响应数据就是最终我们想要爬取的企业详细数据.

注意:先写思路,再写程序
程序需要先一点点写,再写出全部.
写一步执行一步.

 

 

import requests
headers={
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
}
#第一请求的url地址
first_url='http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
ids=[]
#如何爬取前10页的数据?,双击选中
for page in range(1,11):
data={
"on": "true",
"page": str(page),
"pageSize": "15",
"productName": "",
"conditionType": "1",
"applyname": "",
"applysn": "",
}
#json_obj=requests.post(url=first_url,data=data,headers=headers).json()
response=requests.post(url=first_url,data=data,headers=headers) #响应对象
#response.headers返回的是响应头信息(字典)
if response.headers['Content-Type']=='application/json;charset=UTF-8':
json_obj=response.json()
for dic in json_obj['list']:
ids.append(dic['ID'])
#print(ids) #这个时候我们已经获取到了id
detail_url='http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'
for _id in ids:
data={
'id':_id
}
company_text=requests.post(detail_url,data=data,headers=headers).text
print(company_text)

抓取的数据是下面的内容: