ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python爬虫基础知识笔记——requests2

2021-05-10 13:00:27  阅读:101  来源: 互联网

标签:headers Python list requests2 爬虫 url json data id


requests

爬取搜狗指定词条对应的搜索结果页面(简易网页采集器)

UA:User-Agent(请求载体的身份标识)

UA伪装:门户网站的服务器会检测对应请求的载体身份标识,如果检测到请求的载体身份为某以款浏览器,说明该请求是一个正常的请求。都是如果检测到的请求的载体身份标识不是基于某一款浏览器的,则表示该请求为不正常的请求(爬虫),则服务器端就很有可能拒绝该次请求。
所以正常爬取会失败,所以我们要使用UA伪装。

UA伪装

UA伪装:让爬虫对应的请求载体身份标识伪装成某一款浏览器。
注:浏览器身份标识可以从浏览器右键的检查,
在这里插入图片描述
找到User-Agent。
最后我们就可以写出爬取指定数据的代码了

import requests
#UA伪装:将对应的User-Agent封装到一个字典中
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}
url='https://www.sogou.com/web?'
#处理url携带的参数:封装到字典中
kw = input('enter a word:')
param = {
    'query':kw
}
response = requests.get(url=url,params=param,headers=headers)
page_text = response.text
fileName = kw+'.html'
with open(fileName,'w',encoding='utf-8') as fp:
    fp.write(page_text)
print(fileName,'保存成功')

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

百度翻译

import json
import requests
post_url='https://fanyi.baidu.com/sug'
#进行UA伪装
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}
#post请求参数处理(同get请求一致)
word = input('entry a word:')
data = {
    'kw':word
}
#发送请求
response = requests.post(url=post_url,data=data,headers=headers)
#获取响应数据:json()方法返回的是一个对象(如果确认响应数据是json类型的才能使用json())
dic_obc = response.json()
#进行持久化存储
fileName = word+'.json'
fp = open(fileName,'w',encoding='utf-8')
json.dump(dic_obc,fp=fp,ensure_ascii=False)
print('结束')

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

查看url

在这里插入图片描述

查看数据类型

在这里插入图片描述

查看参数处理方法

在这里插入图片描述

爬取豆瓣电影分类排行榜

import json
import requests
url = 'https://movie.douban.com/j/chart/top_list'
param = {
    'type': '24',
    'interval_id': '100:90',
    'action':'',
    'start': '0',#start表示从库中第几部电影获取
    'limit': '20',#limit表示一次获取多少部电影
}
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}
reponse = requests.get(url=url,headers=headers,params=param)
list_data = reponse.json()
fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
print('over')

在这里插入图片描述
将上图的数据复制到json格式化工具BEJSON中
在这里插入图片描述
爬取的第一个是“憨豆先生精选辑”和豆瓣电影中的一样
在这里插入图片描述
说明没有错误。
在这里插入图片描述

参数的位置

在这里插入图片描述

爬取国家药品监督管理总局基于中华人民共和国化妆品生产许可证相关数据

首页中对应的企业信息数据是通过ajax动态请求到的。
通过观察详情页发现url的域名都是一样的,只有携带的参数(id)不一样,id值可以从首页对应的ajax请求到的json串中获取。
详情页企业数据也是动态加载出来的,再观察发现所有post请求的url都是一样的,只有参数id不一样。

import json

import requests
#批量获取不同企业的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/90.0.4430.93 Safari/537.36'
}
id_list = []#添加企业的id
all_data_list = []#储存所有的企业详情数据
ison_ids = requests.post(url=url,data=data,headers=headers).json()
for dic in ison_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=url,headers=headers,data=data).json()
all_data_list.append(detail_json)
#持久化存储all_data_list
with open('./allData.json','w',encoding='utf-8') as fp:
    json.dump(all_data_list,fp=fp,ensure_ascii=False)
print('over

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

分页操作

import json

import requests
#批量获取不同企业的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/90.0.4430.93 Safari/537.36'
}
id_list = []#添加企业的id
all_data_list = []#储存所有的企业详情数据
#参数的键值
for page in range(1,6):
    page = str(page)
    data = {
        'on': 'true',
        'page': page,
        'pageSize': '15',
        'productName':'',
        'conditionType': '1',
        'applyname':'',
        'applysn':'',
    }
    ison_ids = requests.post(url=url,data=data,headers=headers).json()
    for dic in ison_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=url,headers=headers,data=data).json()
all_data_list.append(detail_json)
#持久化存储all_data_list
with open('./allData.json','w',encoding='utf-8') as fp:
    json.dump(all_data_list,fp=fp,ensure_ascii=False)
print('over')

标签:headers,Python,list,requests2,爬虫,url,json,data,id
来源: https://blog.csdn.net/weixin_51382726/article/details/116562650

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有