2021-3-29 python爬虫自学

1

import requests
if __name__=="__main__":
    url='http://scxk.nmpa.gov.cn:81/xk/'
    headers = {
    
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome'
                             '/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'}
    page_text=requests.get(url=url,headers=headers).text
    with open('./huanzhuangin.html','w',encoding='utf-8') as fp:
        fp.write(page_text)

-动态加载数据
-首页中对应的企业信息数据是通过ajax动态请求到的
-通过对详情页url的观察发现:
-url的域名是一样的,只有携带的参数不一样
-id值可以从首页对应的ajax请求到的json串中获取
-域名和id值拼接处一个完整的企业对应的详情页的url
-详情页的企业详情数据也是动态加载出来的
-所有的post请求的url都是一样的,只有参数的id值是不同
-获取多家id后,就可以将id和url形成一个完整的详情页对应详情数据的ajax请求url

import requests
import json
if __name__=="__main__":
    #批量获取不同企业的id值
    url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'

    data={
    
    
        'on': 'true',
        'page':' 1',
        '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'
                             '/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'}
    id_list=[]#存储id
    all_data_list=[]#存储所有企业的详情数据
    json_ids=requests.post(url=url,headers=headers,data=data).json()
    for dic in json_ids['list']:
        dic['ID']
        id_list.append(dic['ID'])
    print(id_list)#已批量获取id
    #获取企业详情数据
    post_url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
    for id in id_list:
        data={
    
    
            'id':id
        }
        detail_json=requests.post(url=post_url,headers=headers,data=data).json()
        #print(detail_json,'end')
        all_data_list.append(detail_json)
    # 持久化存储
    fp=open('./alldata.json','w',encoding='utf-8')
    json.dump(all_data_list,fp=fp,ensure_ascii=False)
    print("over")

注意:dump()里有个参数indent=True可以自动排版
Ctrl+Alt+L 格式化文档
3,

import requests
import json
if __name__=="__main__":
    #批量获取不同企业的id值
    url='http://scxk.nmpa.gov.cn: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'
                             '/89.0.4389.90 Safari/537.36 Edg/89.0.774.63'}
    id_list = []  # 存储id
    all_data_list = []  # 存储所有企业的详情数据
    for page in range(1,6):
        page=str(page)
        data={
    
    
            'on': 'true',
            'page':' 1',
            'pageSize': '15',
            'productName':'',
            'conditionType': '1',
            'applyname':'',
            'applysn':'',
        }
        json_ids=requests.post(url=url,headers=headers,data=data).json()
        for dic in json_ids['list']:
            id_list.append(dic['ID'])
    #获取企业详情数据
    post_url='http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
    for id in id_list:
        data={
    
    
            'id':id
        }
        detail_json=requests.post(url=post_url,headers=headers,data=data).json()
        #print(detail_json,'end')
        all_data_list.append(detail_json)
    # 持久化存储
    fp=open('./alldata.json','w',encoding='utf-8')
    json.dump(all_data_list,fp=fp,ensure_ascii=False)
    print("over")

总结:
requests模块:python中原生的一款基于网络请求的模块——模拟浏览器发送请求
urllib模块(比较古老)
–如何使用requests模块:
–①指定url
-UA伪装
-请求参数的处理(发起的请求携带了参数就需要处理)
②发起请求
③获取响应数据
④持久化存储

猜你喜欢

转载自blog.csdn.net/weixin_45921943/article/details/115311451