小爬爬2.回顾

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.化妆品生产许可信息管理系统服务

全局搜索:

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

 

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

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

 

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

response指代的是响应的数据.

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

 分析:

#搜索的地址: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)

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

猜你喜欢

转载自www.cnblogs.com/studybrother/p/10939309.html