小何的爬虫笔记——数据解析

""""
聚焦爬虫:爬取页面中指定的页面内容
        -编码流程
            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))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值