Python爬虫:requests模块深入及案例

案例一:获取CSDN关键字的搜索结果页面

requests.get(url= ,params= ,headers= )

  • url:请求地址
  • params:url携带的参数,字典类型

指定url发起请求是携带参数的,请求时将params中的字典类型数据转换为url中参数。

import requests

# 在CSDN中搜索,参数q为搜索关键字
searchURL = 'https://so.csdn.net/so/search'

# 处理url携带的参数:封装到字典中
keyWord = input('CSDN Search KeyWord is :')
param = {
    
    
    # 请求所需的参数,字典类型
    'q':keyWord
}

response = requests.get(url=searchURL ,params=param)
# 指定url发起请求是携带参数的,请求时将params中的字典类型数据转换为url中参数

pageText = response.text
# 爬取到的文本数据


fileName = keyWord + '.html'
with open('./dataFiles/'+fileName,'w',encoding='utf-8') as fp:
    fp.write(pageText)
# 生成以关键字命名的html文件

在这里插入图片描述

案例二:输入单词获取百度翻译的结果

在这里插入图片描述在这里插入图片描述

检查网页可知,百度翻译的请求方式为post,需要用到requests.post()。关键字为data里面的kw。

requests.post(url= ,data= ,headers= )

  • url:请求页面
  • data:关键字,字典类型
  • headers:头信息,字典类型,用于UA伪装
# 百度翻译
# - post请求
# - 响应数据是JSON格式

import requests
import json

postURL = 'https://fanyi.baidu.com/sug'

# UA伪装
postHeader = {
    
    
    'User-Agent': '来自网页检查'
}
# 参数处理
data = {
    
    
    'kw': 'baby'
    # post请求的参数数据与get一致,与get方法不同的是不显示在地址栏,可以通过检查查看
    # kw为网址指定的参数名,若修改则发生未知错误
}

# 发送请求
response = requests.post(url=postURL, data=data, headers=postHeader)

# 获取响应数据,json格式
dataObj = response.json()
print(dataObj)

# 存储
jsonFilePath = open('./dataFiles/dog.json', 'w', encoding='utf-8')
json.dump(dataObj, fp=jsonFilePath, ensure_ascii=False)

print('Over!')

在这里插入图片描述

案例三:获取豆瓣电影的评分前几名的电影信息

方法与上面两个案例类似,直接看代码

# 获取豆瓣电影排行榜信息
import requests
import json

doubanURL = 'https://movie.douban.com/j/chart/top_list?'
# url地址
doubanParam = {
    
    
    #参数
    'type_name':'喜剧',
    'type': 24,
    'interval_id': '100:90',
    'start':'1',   # 从第几部电影开始取
    'limit':'10'    # 取出的个数
}
doubanHeader = {
    
    
    # 头信息,用于UA伪装
    'User-Agent':'来自网页检查'
}

response = requests.get(url=doubanURL ,params=doubanParam ,headers=doubanHeader)

print(response.json())

fp = open('./dataFiles/doubanTop10.json','w',encoding='utf-8')
json.dump(response.json(),fp=fp,ensure_ascii=False)

print('Over.....')

在这里插入图片描述

案例四:通过在药监局网站中的企业id值获取企业信息

  • 通过post请求的data里面的id值可以拼接得到对应企业信息的url
  • 定义一个函数GetInfoFromId(cid):参数cid为企业id,返回对应的企业信息的json数据。
  • 用列表循环将爬取到的企业信息json数据以“企业名.json"文件名依次保存
import json

import requests

def GetInfoFromId(cid):
    '''
    通过企业id获取企业信息
    :param cid: 企业id
    :return: json
    '''
    getInfoURL = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById'
    getInfoHeader = {
    
    
        'User-Agent':'网页检查获得'
    }
    getInfoData = {
    
    
        'id':cid
    }
    return requests.post(url=getInfoURL, data=getInfoData, headers=getInfoHeader).json()

yjjURL = 'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList'
yjjHeader = {
    
    
    'User-Agent':'来自网页检查'
}
yjjData = {
    
    
    'on': True,
    'page': 1,
    'pageSize':15,
    'productName':None,
    'conditionType':1,
    'applyname':None,
    'applysn':None
}
resJson = requests.post(url=yjjURL, data=yjjData, headers=yjjHeader).json()
# print(resJson['list'])
for item in resJson['list']:
    # print(item['ID'])
    idGetJson = GetInfoFromId(item['ID'])
    pathStr = './dataFiles/药监局各企业信息/'+item['EPS_NAME']+'.json'
    jsonFilePath = open(pathStr,'w',encoding='utf-8')
    json.dump(idGetJson, fp=jsonFilePath, ensure_ascii=False)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Dae_Lzh/article/details/118787144