""""
聚焦爬虫:爬取页面中指定的页面内容
-编码流程
1.指定url
2.发起请求
3.获取响应数据
4。将响应数据进行持久化存储
数据解析分类:
-正则
-bs4
-xpath(***)
数据解析原理:
-解析的局部的文本内容都会在标签之间或者标签对应的属性中进行存储
-1.进行指定标签定位
-2.标签或者标签对应的属性中存储的数据值进行提取
"""""
# 爬取糗事百科中所有的图片
import requests
import re
import os
# 如何爬取图片数据
if __name__ == '__main__':
# 创建一个文件夹保存数据
if not os.path.exists('./qiutuLibs'):
os.mkdir('./qiutuLibs')
url='https://pic.qiushibaike.com/system/pictures/12376/123765122/medium/2FGDR342YXMO1LLU.jpg'
img_data=requests.get(url=url).content #.content返回二进制形式图片数据 text(字符串) json() (对象)
with open('./jiutu.jpg','wb') as fp:
fp.write(img_data)
print('over')
# 正则解析1 爬取所有图片
url='https://www.qiushibaike.com/imgrank/'
headers_gooogle={
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
#使用通用爬虫对整张页面进行爬取
page_text=requests.get(url=url,headers=headers_gooogle).text
# 使用聚焦爬虫将页面中所有的图片进行提取
'''
<div class="thumb">
<a href="/article/123763423" target="_blank">
<img src="//pic.qiushibaike.com/system/pictures/12376/123763423/medium/3GXN0OMOKB36Y06K.jpg" alt="糗事#123763423" class="illustration" width="100%" height="auto">
</a>
</div>
'''
# print(page_text)
ex='<div class="thumb">.*?<img src="(.*?)" alt=.*?</div>'
img_src_list=re.findall(ex,page_text,re.S)
for src in img_src_list:
# 拼接出一个完整图片地址
src='https:'+src
# 求到了图片的二进制数据
img_data_result=requests.get(url=url,headers=headers_gooogle).content
# 生成图片名称,从图片末端提取
img_name=src.split('/')[-1]
# 图片存储路径
img_path='./qiutuLibs/'+img_name
with open(img_path,'wb') as fp:
fp.write(img_data_result)
print(img_name,'over')
if __name__ == '__main__':
import requests
import re
import json
"""
项目案例4:爬取国家药品监督管理总局中基于中华人民共和国化妆品生产许可证的相关数据
"""
headers_firefox = {'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0'}
headers_google = {
'User-Agent':
'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36'
}
"""
# with open('./1.html','w',encoding='utf-8') as fp:
# fp.write(data)
# print('over')
从此可以发现有些数据是动态加载过来的(例如阿贾克斯数据)
发现首页中对应的企业信息数据是通过ajax动态请求到的
通过对详情页的观察发现:url域名是一样的,只有携带的参数(id)不是一样的
id可以从首页中对应的ajax请求到的json串中获取
域名和ID拼接处一个完整企业对应的url
详情页的数据也是动态加载过来的
发现所有post请求的URL都是一样的,只有参数id是不同的
可以批量获取多家企业的id,然后合并id和url获得所需要的数据
"""
# 第一步:批量获取ID地址
url = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
# 参数的封装
id_list = []
for page in range(0, 20):
page = str(page)
param = {
'on': 'true',
'page': page,
'pageSize': '15',
'productName': ' ',
'conditionType': '1',
'applyname': ' '
}
json_ids = requests.post(url=url, data=param, headers=headers_google).json()
for dic in json_ids['list']:
id_list.append(dic['ID'])
# id结合url 获取企业详情数据
post_url = "http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById"
all_datalist = []
for id in id_list:
data = {
'id': id
}
detail_json = requests.post(url=post_url, headers=headers_google, data=data).json()
all_datalist.append(detail_json)
fp = open('./alldata.json', 'w', encoding='utf-8')
json.dump(all_datalist, fp=fp, ensure_ascii=False)
print(len(all_datalist))
小何的爬虫笔记——数据解析
最新推荐文章于 2024-09-07 20:08:36 发布