Python爬虫:requests模块深入及案例
Posted 晚风Adore
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
以上是关于Python爬虫:requests模块深入及案例的主要内容,如果未能解决你的问题,请参考以下文章