python爬虫实例解析-Python(爬虫)- 动态加载案例分析

requests

"""

基于网络请求的模块。

环境的安装:pip install requests

作用:模拟浏览器发起请求

分析requests的编码流程:

1.指定url

2.发起了请求

3.获取响应数据

4.持久化存储

"""

"""

处理数据量级的问题:

遇到了对应的反爬机制

反爬机制:UA检测

反反爬策略:UA伪装

UA伪装的实现:

1.定义一个字典

2.在字典中进行相关请求头信息的伪装

3.将该字典作用到get方法的headers参数中即可

UA检测被作用到了大量的网站中,因此日后,爬虫程序编写中一定要直接加上UA的操作

"""

简单案例一

"""

url = 'https://www.cnblogs.com/zhaoganggang/p/12873354.html'

response = requests.get(url)

page_text = response.text

page_text.encode('utf-8')

print(page_text)

"""

简单案例二豆瓣 ajax

"""

需求:爬取豆瓣电影的详情数据

分析:

更多的电影数据是通过将滚轮滑动到底部后发起了ajax请求请求到的电影数据

对ajax请求的url进行捕获

对ajax请求的url进行请求发送

"""

"""

url= 'https://movie.douban.com/j/chart/top_list'

headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

}

for i in range(0,10):

param = {

'type': '13',

'interval_id': '100:90',

'action':'',

'start': str(i*20),

'limit': '20',

}

response = requests.get(url=url,params=param,headers=headers)

mov_list = response.json()

for mov in mov_list:

name = mov['title']

sor = mov['score']

print(name+':'+sor)

"""

简单案例三肯德基+动态加载

"""

肯德基餐厅查询http://www.kfc.com.cn/kfccda/storelist/index.aspx

分析:

动态加载数据

动态加载数据

概念:通过其他/另一个请求请求到的数据

特性:可见非可得

判定相关的页面数据是否为动态加载的数据?

基于抓包工具定位到浏览器地址栏url对应的请求数据包,进行局部搜索:

搜索到:这组被搜索的数据不是动态加载的,可以直接爬取

没有搜到:这组数据是动态加载的,不可以直接爬取。

如何捕获动态加载的数据?

基于抓包工具进行全局搜索,最终可以定位到动态加载数据对应的数据包。

"""

"""

headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

}

url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"

data = {

'cname': '',

'pid': '',

'keyword': '北京',

'pageIndex': '1',

'pageSize': '10',

}

response = requests.post(url=url,headers=headers,data=data)

pos_data = response.json()

# print(pos_data)

data_list = pos_data['Table1']

for i in data_list:

storeName=i.get('storeName')

addressDetail=i.get('addressDetail')

pro=i.get('pro')

provinceName=i.get('provinceName')

s = "{}:{}:{}:{}".format(storeName,addressDetail,pro,provinceName)

print(s)

"""

简单案例四药监总局+动态加载

"""

药监总局数据爬取,爬取的是每一家企业的详情数据

分析:

打开了某一家企业的详情页面,看到了企业的详情数据

判定改家企业的详情数据是否为动态加载的?

进行局部搜索

没有搜索到,说明数据是动态加载出来的

捕获动态加载的数据?

全局搜索,定位到了动态加载数据对应的数据包,提取出了url和请求参数

成功的捕获到了一家企业对应的详情数据

通过上述方式继续分析第二家企业,发现:

每一家企业对应动态加载数据的url都一样:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById,只要请求参数id的值不一样!说明id值标识的就是每一家企业的唯一标识。

捕获每一家企业的id

在首页中,通过抓包工具对企业名称进行搜索,对应的数据包中发现了企业名称和id

url:http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList

"""

"""

# 获取企业id

ids = [] # 所有企业id 爬取多个数据

url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"

headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

}

for page in range(1,6):

data = {

"on": "true",

"page": str(page),

"pageSize": "15",

"productName":"",

"conditionType": "1",

"applyname":"",

"applysn":"",

}

company_datas_json = requests.post(url=url, headers=headers, data=data).json()

# print(company_datas_json)

for dic in company_datas_json['list']:

_id = dic['ID']

ids.append(_id)

detail_url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'

for _id in ids:

data = {

'id': _id

}

company_json = requests.post(url=detail_url, headers=headers,data=data).json()

print(company_json['epsName'],company_json['epsProductAddress'])

"""

"""

#爬取单个数据

headers = {

'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"

}

url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById'

data = {

'id': 'ff83aff95c5541cdab5ca6e847514f88'

}

response = requests.post(url=url,headers=headers,data=data).json()

print(response)

"""

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值