python网络爬虫--requests模块

requests 模块简介

  • 简介: 爬虫中的一个基于网络请求的模块
  • 安装: pip install requests
  • 作用: 模拟浏览器发起请求
  • 编码流程:
    • 1.指定url
    • 2.发起请求
    • 3.获取响应数据(爬取到的页面源码数据)
    • 4.持久化存储

requests模块的使用

第一个反爬机制

robots 协议: 是一个纯文本协议, 协议中规定了该网站中的那些数据可以爬取、那些不可以爬取。
 
破解: 你自己主观性的不遵从该协议即可。

import requests

实战案例1: 爬取搜狗首页的页面源码

# 1. 指定url
url = "https://www.sogou.com/"

# 2. 发起请求
response = requests.get(url)

# 3. 获取响应数据
page_text = response.text

# 4. 持久化存储
with open("E:/pachong/1/sogou.html", 'w', encoding='utf-8') as fp:
    fp.write(page_text)


image.png

实战案例2: 在1的基础上,实现一个简易的网页采集器

  • 基于搜狗针对指定不同的关键字将其对应的页面数据进行爬取
  • 参数动态化:
  • 如果强求的url携带的参数,且我们想要将携带的参数进行动态化,我们需要:
      1. 将携带的动态参数以键值对的形式封装到一个字典
      1. 将该字典作用到get方法的parmas参数中即可。
keyWord  = input("Enter a keyword:")
# 携带了请求参数的url,如果想要爬取不同关键字对应的页面,我们需要将url携带的参数进行动态化
# 实现参数动态化:
params ={
    'query': keyWord
}

url = "https://www.sogou.com/web"

# parms参数字典:保存请求市url的携带的参数
response = requests.get(url= url, params=params)

# 修改响应数据的编码格式
# encoding返回的是响应数据的原始编码格式,重新赋值,修改编码
response.encoding = 'utf-8'
page_text = response.text

fileName = "E:/pachong/1/"+ keyWord + '.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'爬取完毕.')
Enter a keyword:jay
E:/pachong/1/jay.html 爬取完毕.

image.png

  • 出现异常的访问请求
    • 网络后台已经检测出该次请求不是通过浏览器发起的请求而是通过爬虫程序发起的请求
    • 不是浏览器发起的请求都是异常的请求
    • 网站的后台是如何知道请求是不是通过浏览器发起的呢?
      • 通过判定请求头中到的urser-agent判定的
  • 什么是User-Agent ?
    • 请求载体的身份标识
    • 请求载体:
      • 浏览器
        • 浏览器的身份标识是统一固定的可以从抓包工具中获取
      • 爬虫程序
        • 爬虫程序的身份标识是不同的

第二种反爬机制

UA检测网站后台会检测请求对应的User-Agent,以判定当前请求是否为异常请求。

反爬策略:

UA 伪装:   UA伪装已经被作用到了部分用户的网站中,日后我们写的爬虫程序都默认带上UA检测操作。    

伪装流程从抓包工具中捕获到某一个基于浏览器请求的User-Agent的值,将其伪装作用到一个字典中,将该字典作用到请求方法(get,post)的header参数即可。

keyWord  = input("Enter a keyword:")

# 携带了请求参数的url,如果想要爬取不同关键字对应的页面,我们需要将url携带的参数进行动态化
# 实现参数动态化:
params ={
    'query': keyWord
}

# UA 伪装:
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 = "https://www.sogou.com/web"

#  parms参数字典:保存请求市url的携带的参数
# 实现UA伪装
response = requests.get(url= url, params=params, headers=headers)

# 修改响应数据的编码格式
# encoding返回的是响应数据的原始编码格式,重新赋值,修改编码
response.encoding = 'utf-8'
page_text = response.text

fileName = "E:/pachong/1/"+ keyWord + '.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'爬取完毕.')
Enter a keyword: jay
E:/pachong/1/jay.html 爬取完毕.

image.png

实战案例3. 爬取豆瓣电影中的电影详情数据

url = "https://movie.douban.com/typerank?type_name=%E5%8A%A8%E4%BD%9C&type=5&interval_id=100:90&action="
# UA 伪装:
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"
}
response = requests.get(url=url, headers=headers)
response.encoding = 'utf-8'
page_text = response.text

fileName = "E:/pachong/1/"+ 'douban' + '.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'爬取完毕.')
E:/pachong/1/douban.html 爬取完毕.
  • 动态加载数据的捕获
    • 什么叫动态加载数据?
      • 通过requests 模块无法每次都实现所看即所得
      • 有些数据是通过非浏览器地址栏中的url请求到的数据,而是其他请求请求到的数据,这些通过其他请求请求到的数据就是动态加载数据
    • 如何检测网页中是否存在动态加载的数据
      • 基于抓包工具进行局部搜索
        • 在当前网页中打开抓包工具、捕获URL对应的数据包,在该数据包的response选项卡中搜索想要爬取到的数据,如果搜索到了结果,表明不是动态加载的,否则就是动态加载的。
  • 怎样捕获动态加载数据?
    • 基于抓包工具进行全局搜索。
    • 定位到动态加载数据对应的数据包,从该数据包中就可以提取出
      • 请求的url
      • 请求的方式
      • 请求携带的方式
      • 看到响应的数据
url = "https://movie.douban.com/j/chart/top_list"
params = {
    "type": 5,
    "interval_id": "100:90",
    "action": "",
    "start": 0,
    "limit": 20,
}
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"
}
response = requests.get(url=url,params=params, headers=headers)
# .json 将获取的字符串形式的数据序列号为json或者列表
page_text = response.json()
# print(page_text)
# 解析出电影名 + 评分
for movie in page_text:
    name = movie['title']
    score = movie['score']
    cover = movie['cover_url']
    print(name,score,cover)
福尔摩斯二世 9.5 https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2206737207.jpg
这个杀手不太冷 9.4 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p511118051.jpg
蝙蝠侠:黑暗骑士 9.2 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p462657443.jpg
指环王3:王者无敌 9.2 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1910825503.jpg
七武士 9.2 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2565471701.jpg
指环王2:双塔奇兵 9.1 https://img9.doubanio.com/view/photo/s_ratio_poster/public/p909265336.jpg
将军号 9.1 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2248676081.jpg
搏击俱乐部 9.0 https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1910926158.jpg
指环王1:魔戒再现 9.0 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1354436051.jpg
黑客帝国 9.0 https://img1.doubanio.com/view/photo/s_ratio_poster/public/p451926968.jpg
攻壳机动队 9.0 https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1910922395.jpg
赛文奥特曼 我是地球人 9.0 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2547616522.jpg
V字仇杀队 8.9 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1465235231.jpg
勇敢的心 8.9 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p1374546770.jpg
乱 8.9 https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2215882912.jpg
用心棒 8.9 https://img9.doubanio.com/view/photo/s_ratio_poster/public/p2163659004.jpg
让子弹飞 8.8 https://img1.doubanio.com/view/photo/s_ratio_poster/public/p1512562287.jpg
蝙蝠侠:黑暗骑士崛起 8.8 https://img9.doubanio.com/view/photo/s_ratio_poster/public/p1706428744.jpg
杀人回忆 8.8 https://img1.doubanio.com/view/photo/s_ratio_poster/public/p2326071698.jpg
谍影重重3 8.8 https://img1.doubanio.com/view/photo/s_ratio_poster/public/p792223507.jpg
  • 思考: 基于抓包工具进行全局搜索不一定可以每次都定位到动态加载数据对应的数据包?
  • 原因: 如果动态加载的数据是经过加密的密文数据。

实战案例4: 爬取肯德基餐厅位置数据(分页信息)

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

data = {
    "cname":"",
    "pid": "",
    "keyword": "北京",
    "pageIndex": "1",
    "pageSize": "10",
}

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"
}

response = requests.post(url=url,headers=headers, data=data)
page_text = response.json()
for dic in page_text['Table1']:
    title = dic["storeName"]
    address = dic["addressDetail"]
    print(title,address)
育慧里 小营东路3号北京凯基伦购物中心一层西侧
京通新城 朝阳路杨闸环岛西北京通苑30号楼一层南侧
黄寺大街 黄寺大街15号北京城乡黄寺商厦
四季青桥 西四环北路117号北京欧尚超市F1、B1
亦庄 北京经济开发区西环北路18号F1+F2
石园南大街 通顺路石园西区南侧北京顺义西单商场石园分店一层、二层部分
北京站广场 北京站一层
北京南站 北京南站候车大厅B岛201号
北清路 北京北清路1号146区
大红门新世纪肯德基餐厅 海户屯北京新世纪服装商贸城一层南侧
# 爬取多页
def crawler(pageindex):
    url = "http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword"
    data = {
        "cname":"",
        "pid": "",
        "keyword": "北京",
        "pageIndex":pageindex,
        "pageSize": "10",
    }
    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"
    }
    response = requests.post(url=url,headers=headers, data=data)
    page_text = response.json()
    for dic in page_text['Table1']:
        title = dic["storeName"]
        address = dic["addressDetail"]
        print(title,address)
        
for i in range(1,8):
    crawler(str(i))
育慧里 小营东路3号北京凯基伦购物中心一层西侧
京通新城 朝阳路杨闸环岛西北京通苑30号楼一层南侧
黄寺大街 黄寺大街15号北京城乡黄寺商厦
四季青桥 西四环北路117号北京欧尚超市F1、B1
亦庄 北京经济开发区西环北路18号F1+F2
石园南大街 通顺路石园西区南侧北京顺义西单商场石园分店一层、二层部分
北京站广场 北京站一层
北京南站 北京南站候车大厅B岛201号
北清路 北京北清路1号146区
大红门新世纪肯德基餐厅 海户屯北京新世纪服装商贸城一层南侧
巴沟 巴沟路2号北京华联万柳购物中心一层
亦庄沃尔玛 经济技术开发区文化园东路6号北京经开汇展中心1-2层
北京站Select 北京火车站候车大厅一层西侧原商务中心
西客站内三 莲花桥东路118号北京西客站候车大厅内2层第4营业厅及2层夹层回廊
通州北苑华联 杨庄北里五十二号天时名苑小区十四号楼北京华联南侧一层
日照银座餐厅 北京路与泰安路交汇处银座商城一楼
荆州北京路 沙区北京中路227号肯德基餐厅
荆州月亮湾 沙市区北京路中路173号
荆州美佳华 北京路美佳华A128号
金山 建新镇金山大道100号北京金山05店面
北京南站三 北京南站地下一层南大门内东侧场地快速进站口3与快速进站口4中间
北京南站五 北京南站地下一层到达层西南侧第5出站口旁
北京南站六 北京南站二层旅客出发层西南角(23B检票口)旁
北京站广场二 北京站进站口西侧前廊下
马坡汽车穿梭 马坡镇顺城大街29号北京乡村乐园一层
新城外城DT 南四环成寿寺路308号北京城外诚家居广场停车广场
铁路 北京南路895号豪威大厦1层肯德基餐厅
苏州路 北京南路28号家乐福苏州路购物中心一层肯德基餐厅
蒙苑 兴安北路169号北京华联一层
南昌 南昌路982号新北京华联一层
太原府东 府东街18号北京华联超一层
金利 新华路138号鑫乐广场(北京华联超市旁)
芜湖营盘山路 北京东路与营盘山路交叉口大润发超市一楼
钢铁大街 钢铁大街与三八路交汇处西北角北京华联超市底店
阜阳火车站 向阳路和北京东路交汇口
淮安北京路苏果 北京新村五区新苑逸城
小河 黔江路29号北京华联一层
金阳82266155 金阳新区北京西路金源时代购物中心一层
国酒路 仁怀市中枢镇酒都新区国酒大道超一时代广场一楼北京华联旁
白云 北京路延长线大白庙村家乐福超市一楼
北辰 北京路延长线财富中心E栋
购物广场 北海大道与北京路交汇处北海城购物广场首层
博乐友好 北京路与新华路交汇处友好购物中心肯德基餐厅
北京站SEL-2 北京站内二楼高架西一至四、西十六商亭
梦时代 北京东路308号恒茂梦时代国际广场三号楼一层
荆州万达 北京西路508号万达广场一层1001A
北京站精选3 北京火车站内2层第四候车室
洪泽大润发 北京路与建设路交汇处
洪城大厦 西湖区北京西路156号一层洪城大厦肯德基
福润德餐厅 北京南路433号大寨沟福润德一楼肯德基餐厅
奎屯友好餐厅 飞鸿里北京东路3栋友好时尚购物中心1-2层
徐州泉山大润发 北京路与欣欣路交叉口大润发超市一层
大兴龙湖 龙湖北京大兴天街商业楼三层3F-10a铺位
徐州铜山万达 北京北路19号
西站南广场二号 北京西客站南站房东附楼一层105号铺位、104铺位和二层204铺位
银川悦海 尹家渠街东侧、枕水路南侧北京华联悦海新天地购物中心一层
十堰万达 发展大道与北京路延长线交汇处
银川新华联 通达北街以西北京路以北新华联广场1层、4层
沧州高铁站 北京路西端头高铁站候车大厅二楼
北海宁春城 北京路西、西南大道北和安.宁春城一期
宣堡服务区北 京沪高速公路宣堡服务区北楼1+2(往北京方向)
西郊百益餐厅 北京中路46号西郊百益超市一层
仰忠汇 越秀区北京路168号二层自编B201/L201号铺
南昌甜品站 南昌路982号北京华联5层
北京肯德基有限公司紫码路餐厅 阎村镇乐活家园45号楼一层109号商铺、二层109号商铺、二层108号商铺
拉萨功德林天街 北京中路47号1,2层
橘洲一号 北京东三路18号橘洲一号(2栋负一楼商铺)首层
十堰远洋国际 五堰街办北京北路83A号1幢2-1
新机场2号 大兴区北京大兴国际机场国际抵港区域
北京站精选3外卖点 北京站内一层大厅中间区域LED显示屏下

实战案例5:爬取药监总局中的企业详情数据

  • url : http://125.35.6.84:81/xk/
  • 需求:
    • 将首页中每一家的详情数据进行爬取,爬取前3页即可
  • 提示:
    • 用不到数据解析
    • 所有的数据都是动态加载出来的
    • 将一家企业的详情爬出来 ,然后在爬取多家
import requests
import json

# 1. 从首页找到要爬取的详情页的ID
def crawler_ID(page):
    url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsList"
    data ={
        "on": "true",
        "page": page,
        "pageSize": 15,
        "productName":  "",
        "conditionType": 1,
        "applyname":  "",
        "applysn":  "",
    }
    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"
    }
    response = requests.post(url=url, headers=headers, data=data)
    page_text = response.json()
    for dic in page_text['list']:
        ID.append(dic['ID'])
        
# 2. 爬取每个ID对应的详情页
def crawler_Deatial(id):
    url = "http://125.35.6.84:81/xk/itownet/portalAction.do?method=getXkzsById"
    data ={
        "id": id,
    }
    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"
    }
    response = requests.post(url=url, headers=headers, data=data)
    page_text = response.json()
    print(page_text['epsName'])
    print(page_text['productSn'])
    print(page_text['certStr'])
    print(page_text['epsAddress'])
    print(page_text['epsProductAddress'])
    print(page_text['businessLicenseNumber'])
    print(page_text['legalPerson'])
    print(page_text['businessPerson'])
    print(page_text['qualityPerson'])
    print(page_text['qfManagerName'])
    print(page_text['xkName'])
    print(page_text['rcManagerDepartName'])
    print(page_text['rcManagerUser'])
    print(page_text['xkDateStr'])
    print(page_text['xkDate'])
    print(page_text['xkType'])

if __name__ ==  "__main__":  
    ID = []
    for i in range(1,2):
        crawler_ID(i)
    for id in ID:
        crawler_Deatial(str(id))
广东天姿化妆品科技有限公司
粤妆20200022
一般液态单元(护发清洁类、护肤水类、啫喱类);膏霜乳液单元(护肤清洁类、护发类)
广州市白云区均禾街清湖大塘大道11号(自主申报)
广州市白云区均禾街清湖大塘大道11号(自主申报)
91440101MA5CYUF0XX
陈飞
陈飞
高文武
广东省药品监督管理局
严振
白云区局均禾市场监管所
监管机构指定人员
2021-05-17
2025-01-16
201
森川喀左生态科技发展有限公司
辽妆20190001
一般液态单元(啫喱类、护发清洁类、护肤水类、染烫发类);膏霜乳液单元(护发类、护肤清洁类、染烫发类)
辽宁省朝阳市喀左县利州工业园区森川路1号
辽宁省喀左县利州工业园区森川路1号
91211324MA0U9LCX7G
裴洪声
刘育真
王兵
辽宁省药品监督管理局
潘勇
朝阳市市场监督管理局
高纪宇 刘在洲
2020-05-25
2024-01-10
206
六盘水茁生源化妆品销售有限公司
贵妆20200003
一般液态单元(护发清洁类);膏霜乳液单元(护发类)
贵州省六盘水市钟山开发区闽商科技产业园6号楼B区4层
贵州省六盘水市钟山开发区闽商科技产业园6号楼B区4层
91520290MA6HWHL678
赵望漠
赵文蔚
包继勇
贵州省药品监督管理局
廖昌晖
六盘水市市场监管局高新区分局
陈峻岐
2020-05-25
2025-05-24
201
贵州圣济堂制药有限公司
贵妆20200002
一般液态单元(护肤水类)
贵州省贵阳市清镇市医药园区
贵州省贵阳市清镇医药工业园区
915201006222407117
丁林洪
李晓春
龙凤仙
贵州省药品监督管理局
廖昌晖
清镇市市场监督管理局
刘艳
2020-05-25
2025-05-24
201
大庆宏昇化妆品有限公司
黑妆20200002
一般液态单元(护肤水类);膏霜乳液单元(护肤清洁类)
黑龙江省大庆高新区科技路109号
黑龙江省大庆高新区科技路109号
91230607MA1BNGAYXN
杨春永
杨春永
宋超
黑龙江省药品监督管理局
李军
黑龙江省药品监督管理局
张跃晨  郭欣
2020-05-22
2025-05-22
201
乐泰药业有限公司
黑妆20160009
一般液态单元(啫喱类、护发清洁类、护肤水类);膏霜乳液单元(护肤清洁类);粉单元(浴盐类)
黑龙江省哈尔滨市呼兰区利民开发区珠海路
哈尔滨市利民开发区北京路
91230000777857927F
郎伟君
郎伟君
徐慧
黑龙江省药品监督管理局
韩爱冬
黑龙江省药品监督管理局
张跃晨  郭欣
2020-05-22
2021-09-30
206
中山市文雅生物科技有限公司
粤妆20180111
蜡基单元(蜡基类)
中山市三乡镇平南村工业区金宏路26号B幢三楼
中山市三乡镇平南村工业区金宏路26号B幢三楼
91442000MA4UJ26RXQ
练文雅
练文雅
李忠良
广东省药品监督管理局
严振
中山市市场监督管理局
由中山市食品药品监督管理局指定
2020-05-21
2023-05-01
206
中山市馥琳化粧品有限公司
粤妆20161502
膏霜乳液单元(护肤清洁类);粉单元(散粉类、块状粉类);蜡基单元(蜡基类)
广东省中山市东升镇胜龙村北洲第三经济合作社天成围(自编号建筑物A、B两幢)
广东省中山市东升镇胜龙村北洲第三经济合作社天成围(自编号建筑物A幢一至五楼、B幢一至四楼)
91442000792942900X
骆彦良
骆彦良
骆韦翔
广东省药品监督管理局
严振
中山市市场监督管理局
由日常监督管理机构指定
2020-05-21
2021-12-06
206
中山市美都化妆品企业有限公司
粤妆20160902
膏霜乳液单元(护肤清洁类);粉单元(散粉类、块状粉类);蜡基单元(蜡基类)
广东省中山市神湾镇宥南村顺明街1号
广东省中山市神湾镇宥南村顺明街1号
914420007123250304
黄伟翃
黄伟翃
吴静果
广东省药品监督管理局
严振
中山市市场监督管理局
由日常监督管理机构指定
2020-05-21
2021-10-16
206
山东美而美生物技术有限公司
鲁妆20160081
一般液态单元(护肤水类),膏霜乳液单元(护肤清洁类)
临沂市广场世纪城AA座601室
临沂国家高新技术产业开发区启阳路(马厂湖南桥)
91371302725408599M
丁涛
丁涛
梁志勇
山东省食品药品监督管理局
王建政
临沂高新技术产业开发区市场监督管理局
李超  汲蕾
2020-05-21
2021-12-25
207
佛山市伯堂生物科技有限公司
粤妆20200078
一般液态单元(护发清洁类、护肤水类、啫喱类)
佛山市三水区乐平镇乐信大道1号004(住所申报)
佛山市三水区乐平镇乐信大道1号004一层、二层(住所申报)
91440607MA52UX2W6P
韦加权
韦加权
邓儒杰
广东省药品监督管理局
严振
佛山市市场监督管理局 三水区市场监督管理局
由日常监督机构指派
2020-05-20
2025-05-19
201
广东艾琪生物科技有限公司
粤妆20200032
一般液态单元(护发清洁类、护肤水类、啫喱类);膏霜乳液单元(护肤清洁类、护发类);气雾剂及有机溶剂单元(气雾剂类、有机溶剂类)
英德市英红镇广东顺德清远(英德)经济合作区中南片区A04-02地块第10号
英德市英红镇广东顺德清远(英德)经济合作区中南片区A04-02地块第10号
91441881MA526HHR6C
赵泽涛
赵泽涛
钱冲
广东省药品监督管理局
严振
英德市市场监督管理局
吕军    陈晓苗
2020-05-20
2025-01-20
206
山东美貌制药有限公司
鲁妆20190003
一般液态单元(护肤水类),膏霜乳液单元(护肤清洁类),粉单元(散粉类),蜡基单元(蜡基类)
山东省莱芜高新区李陈庄工业园金源路6号
山东省莱芜高新区李陈庄工业园金源路6号
91371200MA3D8LRY5D
王鹏
赵新
陈洪霞
山东省食品药品监督管理局
史国生
莱芜高新技术产业开发区市场监督管理局
何亮,段绍苗
2020-05-20
2024-03-25
207
广州总都国际生物科技有限公司
粤妆20200077
一般液态单元(护发清洁类、护肤水类、啫喱类);膏霜乳液单元(护肤清洁类、护发类);蜡基单元(蜡基类)
广州市白云区江高镇振华北路88号3栋101(自主申报)
广州市白云区江高镇振华北路88号3栋101、201
91440101MA59T0GK8C
陈义雄
陈义雄
聂光荣
广东省药品监督管理局
严振
白云区局江高市场监管所
监管机构指定人员
2020-05-19
2025-05-18
201
广州鼎得康高分子材料有限公司
粤妆20170596
气雾剂及有机溶剂单元(有机溶剂类)
广州市从化区太平镇沛益巷1号A厂房一、三、四、五层
广州市从化区太平镇沛益巷1号A厂房一、三、四、五层
91440113MA59B20Y8K
郑文杰
郑文杰
孙德波
广东省药品监督管理局
严振
从化区局太平市场监管所
监管机构指定人员
2020-05-19
2022-11-30
206

参考内容:
bilibili : 张晓波老师 python网络爬虫课程

https://space.bilibili.com/416807106?spm_id_from=333.788.b_765f7570696e666f.1

猜你喜欢

转载自www.cnblogs.com/sinlearn/p/12960625.html