requests模块的基本使用
- 基于网络请求的模块。
- 环境的安装:pip install requests
- 作用:模拟浏览器发起请求
- 分析requests的编码流程:
- 1.指定url
- 2.发起了请求
- 3.获取响应数据
- 4.持久化存储
- 需求:爬取搜狗首页的页面源码数据
import requests
#1.指定url
url = 'https://www.sogou.com/'
#2.发起请求,get的返回值是一个响应对象
response = requests.get(url)
#3.获取响应数据,text属性返回的是字符串形式的响应数据
page_text = response.text
#4,持久化存储
with open('./sogou.html','w',encoding='utf-8') as fp:
fp.write(page_text)
url = 'https://www.sogou.com/web?query=人民币'
response = requests.get(url)
page_text = response.text
with open('./人民币.html','w',encoding='utf-8') as fp:
fp.write(page_text)
url = 'https://www.sogou.com/web?query=人民币'
response = requests.get(url)
#修改响应数据的编码格式
response.encoding = 'utf-8'
page_text = response.text
with open('./人民币.html','w',encoding='utf-8') as fp:
fp.write(page_text)
- 处理数据量级的问题:
- 遇到了对应的反爬机制
- 反爬机制:UA检测
- 反反爬策略:UA伪装
- UA伪装的实现:
- 1.定义一个字典
- 2.在字典中进行相关请求头信息的伪装
- 3.将该字典作用到get方法的headers参数中即可
- UA检测被作用到了大量的网站中,因此日后,爬虫程序编写中一定要直接加上UA的操作
url = 'https://www.sogou.com/web?query=人民币'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
response = requests.get(url,headers=headers)#UA伪装
#修改响应数据的编码格式
response.encoding = 'utf-8'
page_text = response.text
with open('./人民币.html','w',encoding='utf-8') as fp:
fp.write(page_text)
- 最终实现
- 请求参数的动态化
- 实现:
- 1.定义一个字典
- 2.字典中的键值就是url携带的参数
- 3.将字典作用到get方法的params参数中
url = 'https://www.sogou.com/web'
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
#参数动态化
wd = input('enter a key word:')
param = {
'query':wd
}
response = requests.get(url,headers=headers,params=param)#UA伪装
#修改响应数据的编码格式
response.encoding = 'utf-8'
page_text = response.text
fileName = wd+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
fp.write(page_text)
print(fileName,'爬取成功!!!')
enter a key word:波晓张
波晓张.html 爬取成功!!!
- 需求:爬取豆瓣电影的详情数据
- 分析:
- 更多的电影数据是通过将滚轮滑动到底部后发起了ajax请求请求到的电影数据
- 对ajax请求的url进行捕获
- 对ajax请求的url进行请求发送
url = 'https://movie.douban.com/j/chart/top_list'
fp = open('./movieData.txt','a+',encoding='utf-8')
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)
#json()将json串进行序列化
movie_list = response.json()
for dic in movie_list:
name = dic['title']
score = dic['score']
fp.write(name+':'+score+'\n')
print('第{}页数据爬取成功!'.format(i))
fp.close()
第0页数据爬取成功!
第1页数据爬取成功!
第2页数据爬取成功!
第3页数据爬取成功!
第4页数据爬取成功!
第5页数据爬取成功!
第6页数据爬取成功!
第7页数据爬取成功!
第8页数据爬取成功!
第9页数据爬取成功!
- 肯德基餐厅查询http://www.kfc.com.cn/kfccda/storelist/index.aspx
- 分析:
- 动态加载数据
- 概念:通过其他/另一个请求请求到的数据
- 特性:可见非可得
- 判定相关的页面数据是否为动态加载的数据?
- 基于抓包工具定位到浏览器地址栏url对应的请求数据包,进行局部搜索:
- 搜索到:这组被搜索的数据不是动态加载的,可以直接爬取
- 没有搜到:这组数据是动态加载的,不可以直接爬取。
- 如何捕获动态加载的数据?
- 基于抓包工具进行全局搜索,最终可以定位到动态加载数据对应的数据包。
import requests
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
}
data = {
'cname': '',
'pid': '',
'keyword': '广州',
'pageIndex': '1',
'pageSize': '10',
}
url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
response = requests.post(url=url,headers=headers,data=data)
pos_data = response.json()
pos_data
{'Table': [{'rowcount': 27}],
'Table1': [{'addressDetail': '广州路104号',
'cityName': '南京市',
'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡,生日餐会',
'provinceName': '江苏省',
'rownum': 1,
'storeName': '广州'},
{'addressDetail': '天河路123号广州购书中心负一层',
'cityName': '广州市',
'pro': '24小时,Wi-Fi,点唱机,礼品卡',
'provinceName': '广东省',
'rownum': 2,
'storeName': '购书中心'},
{'addressDetail': '广州南站三楼B区餐饮夹层(B26-B27检票口上方)',
'cityName': '广州市',
'pro': '礼品卡',
'provinceName': '广东省',
'rownum': 3,
'storeName': '南站二'},
{'addressDetail': '小谷围广州大学城广州大学生活区商业中心首层A1028及二层A2009',
'cityName': '广州市',
'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡',
'provinceName': '广东省',
'rownum': 4,
'storeName': '大学城'},
{'addressDetail': '广州大道北1419号佳润广场首层',
'cityName': '广州市',
'pro': '24小时,Wi-Fi,店内参观,礼品卡,生日餐会',
'provinceName': '广东省',
'rownum': 5,
'storeName': '佳润'},
{'addressDetail': '环西路158号广州客运站3楼',
'cityName': '广州市',
'pro': 'Wi-Fi,礼品卡',
'provinceName': '广东省',
'rownum': 6,
'storeName': '广州客运站'},
{'addressDetail': '广州大道北嘉裕太阳城广场2-59号铺首层和二层',
'cityName': '广州市',
'pro': '24小时,Wi-Fi,点唱机,店内参观,礼品卡,生日餐会',
'provinceName': '广东省',
'rownum': 7,
'storeName': '太阳城'},
{'addressDetail': '广州南站一楼到达层餐厅',
'cityName': '广州市',
'pro': '精选店,礼品卡',
'provinceName': '广东省',
'rownum': 8,
'storeName': '南站三'},
{'addressDetail': '云城东路509号广州白云万达商业广场101铺',
'cityName': '广州市',
'pro': '店内参观,礼品卡,生日餐会',
'provinceName': '广东省',
'rownum': 9,
'storeName': '万达广场'},
{'addressDetail': '广州南站三楼A区餐饮夹层(A2/A3检票口上方)',
'cityName': '广州市',
'pro': '礼品卡',
'provinceName': '广东省',
'rownum': 10,
'storeName': '南站一'}]}
- 药监总局数据爬取,爬取的是每一家企业的详情数据
- 分析:
- 打开了某一家企业的详情页面,看到了企业的详情数据
- 判定改家企业的详情数据是否为动态加载的?
- 进行局部搜索
- 捕获动态加载的数据?
- 全局搜索,定位到了动态加载数据对应的数据包,提取出了url和请求参数
- 成功的捕获到了一家企业对应的详情数据
- 通过上述方式继续分析第二家企业,发现:
- 捕获每一家企业的id
- 在首页中,通过抓包工具对企业名称进行搜索,对应的数据包中发现了企业名称和id
#获取企业id
ids = [] #存储所有企业的id
url = 'http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList'
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()
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'])
亳州嘉禾药业有限公司 安徽省亳州市谯城区三官工业街168号
倍斯柔(广东)生物科技有限公司 佛山市三水区乐平镇西乐大道东39号登骏数码城二期厂房B3号301A、401A、501A单元(住所申报)
佛山市方方洁生物科技有限公司 广东省佛山市南海区丹灶镇塱心工业区吴伟升厂房自编A座1楼、2楼(住所申报)
青岛尚合生物科技有限公司 山东省青岛市莱西市夏格庄文昌路8号
山东暨肽生物医药科技有限公司 山东省烟台市福山区振华街879号
淳安千岛湖诚达实业有限公司 浙江省杭州市淳安县千岛湖镇永和路321号1幢2楼
浙江好妆化妆品有限公司 浙江省金华市义乌市廿三里街道安商路37号
美尚美生物技术(广州)有限公司 广州市花都区花山镇启源大道6号4栋304房
广州市联盈日用化妆品有限公司 广州市花都区赤坭镇白坭经济社内
浙江绿岛科技有限公司 海润街道工业大道5号
广州市三荣化妆品有限公司 广州市白云区江高镇塘荔路3号A1栋、B栋
广州市欣俊颜化妆品有限公司 广州市白云区白云湖街夏茅向西大道十九社工业区自编一号五楼
广州甲美生物科技有限公司 广州市白云区均禾街石马村旺发大街自编25号
广州卡丝蓝化妆品有限公司 广州市白云区江高镇神山雄郭西路128号3栋101房、201房
广州市绿色春天化妆品科技研发有限公司 广州市白云区均禾街罗岗工业区企业路23号
蔻诗曼嘉化妆品(苏州)有限公司 苏州吴中经济开发区南湖路71号
苏州市丽伊化妆品有限公司 苏州市吴中区越溪街道前珠路16-8号2幢
苏州博克企业集团有限公司 苏州市吴中区甪直镇经济开发区
西安光鼎振华生物科技有限公司 西安经济技术开发区泾高北路中段1号泾渭中小工业园3-201
江门市真美雅化妆品有限公司 江门市高新区科苑东路四大工业园5号楼西3楼
拜尔斯道夫日化(武汉)有限公司 武汉经济技术开发区东风大道512号拜尔斯道夫工业园
四川挽卿丝日化有限公司 四川省泸州市泸县玉蟾街道青龙街6号3栋(泸州国家高新区医药产业园内)
唐邦北美奈思(天津)生物科技有限公司 天津西青学府工业区学府西路1号东区D14号B座301
天津美丽之约生物科技发展有限公司 天津市武清区上马台镇云景道19号
天津市亨美达化妆品工贸有限公司 天津市武清区汊沽港镇经济园
哈尔滨铭渼化妆品有限责任公司 黑龙江省哈尔滨市平房区会宾路1号
广东圣淼水微生物科技有限公司 广东省东莞市松山湖园区工业西路12号1栋333室
广东东顿化妆品有限公司 汕头市潮阳区和平镇凤善林厝堀工业区1号
安徽省蕥蓓药业有限公司 淮南市凤台经济开发区北京蓝天方圆塑钢门窗有限公司凤台分公司院内
乐草元生物医药研究院(广州)有限公司 广州市白云区钟落潭镇大纲领商业中心街7号盛国致富高新产业园7楼701房
广州芷成国际生物科技有限公司 广州市花都区花山镇启源大道6号4栋302房
广州赛薇生物科技有限公司 广州市增城区新塘镇沙埔管道村站前路7号(厂房A1)(3-5楼)
广州天雅生物科技有限公司 广州市白云区白云湖街大朗中路23号金朗工业园B栋三楼
广州市泉芝乐生物科技有限公司白云分公司 广州市白云区钟落潭镇光明东路119号二楼
广州市嘉洲樱花化妆品有限公司 广州市白云区新市镇新科村田岭
广州阿蔓尼生物科技有限公司 广州市白云区太和镇夏良村福田自编3号C栋5楼
广州瑞嘉精细化工有限公司 广州市花都区新华街镜湖大道富源二路进隆工业园
广州市瑞娜丝生物科技有限公司 广州市白云区钟落潭镇金盆金埔路4号
广州市藻谷生物科技有限公司 广州市白云区太和镇龙河西路北横三路001
广州旭林精细化工有限公司 广州市白云区均禾街石马村桃源北顺兴大街13号E栋
广州悠芙莎生物科技有限公司 广州市白云区均禾街罗岗村十社环村北路自编81号二楼
哈尔滨运美达生物科技有限公司 哈尔滨市宾西经济开发区
广西英和药业有限公司 南宁市国凯大道19号E栋6层
广西田七化妆品有限公司 广西梧州工业园区一路1号
江西省诗兰雅化妆品有限公司 江西省鹰潭市余江区锦江镇工业区 206国道 与120乡道交叉口西150米路南
台山市香莹化妆品有限公司 台山市台城新宁大道319号之一、之二
珠海惠仁经典生物科技有限公司 珠海市南屏科技工业园屏北一路30号厂房三楼
沈阳天乐保化品有限公司 沈阳市苏家屯区瑰香街29号
沈阳市坤美惜美容用品有限公司 沈阳市和平区浑河站街105号
广西和桂集团有限公司 南宁市江南区国凯大道东16号车间
湖北怡和亚太卫生用品有限公司 嘉鱼县经济开发区
拜尔斯道夫个人护理用品(中国)有限公司 仙桃市丝宝路特1号
浦江搏美化妆品有限公司 郑家坞镇安平路567号2号楼5楼
义乌市甜馨化妆品有限公司 义亭镇甘塘西路12号四楼
东阳市柯芮生物科技有限公司 浙江省金华市东阳市江北街道凤凰社区歌山北路226号八楼
浦江英玫丽雅化妆品有限公司 黄宅镇兴工路31号
云南天美天康生物科技有限公司 云南省玉溪市元江县澧江街道办江东工业园区(热水塘)
濡美(广州)生物工程有限公司 广州市花都区花山镇启源大道6号4栋405房
暨科生物科技(广州)有限公司 广州市白云区钟落潭镇良园二路18号501
郑州凯莉莱生物科技有限公司 郑州市中牟县官渡镇工业区辉煌三路金菊五街东南角
海南卓瑞生物医药有限公司 海口国家高新技术产业开发区药谷工业园区药谷二路2号
大连美图生物科技有限公司 大连普湾新区石河街道泰海路118-11号
通化康元生物科技有限公司 吉林省通化市通化经济开发区经开环路2266号
蓝科恒业医疗科技(长春)有限公司 长春朝阳经济开发区中小企业孵化基地二期14号楼
山东华玫生物科技有限公司 山东省济南市平阴县玫瑰镇华玫工业园
杭州柏雅化妆品有限公司 横村镇龙腾路218号3号厂房
义乌市纤烁化妆品有限公司 北苑街道春华路570号3号楼二层
河南润丰药业有限公司 河南省濮阳县徐镇镇徐祖路88号
四川天晟制药有限公司 乐山高新区建业大道3号
安徽瑞美药业有限公司 安徽省宿州市高新区北外环二路与灵磬路交叉口工投城镇标准化厂房1号楼
亚美(滁州)日用品科技有限公司 安徽省滁州市苏滁现代产业园柳州路201号
四川荣乐化妆品有限公司 中国(四川)自由贸易试验区成都市双流区西南航空港经济开发区空港四路3006号
四川纬世天然科技有限公司 四川省乐山高新区安港路489号乐山高新科技孵化园A园2号楼一、二、三层
义乌市夏之美雅化妆品有限公司 廿三里街道恒德路5号 4号楼二、三层
广东鸿懿药业科技有限公司 佛山市高明区明城镇明富路72号(材料库)A栋1-2层厂房(住所申报)一、二楼