urllib爬虫 应用实例(三)

目录

一、 ajax的get请求豆瓣电影第一页

二、ajax的get请求豆瓣电影前十页

三、ajax的post请求肯德基官网


一、 ajax的get请求豆瓣电影第一页

目标:获取豆瓣电影第一页的数据,并保存为json文件

设置url,检查 -->  网络 -->  全部  --> top_list --> 标头  --> 请求URL

完整代码:

import urllib.request"""
# get请求
# 获取豆瓣电影第一页的数据,并保存为json文件
"""
url = 'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=0&limit=20'
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"
}# 请求对象的定制
request = urllib.request.Request(url, headers=headers)# 获取响应的数据
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
print(content)# 数据下载到本地
with open('douban.json','w', encoding='utf-8') as file:file.write(content)# import json
# with open('douban.json','w', encoding='utf-8') as file:
#    json.dump(content, file, ensure_ascii=False)
"""
通常是因为默认情况下,json.dump() 使用的编码是 ASCII,不支持包含非ASCII字符(如中文)的文本。为了在 JSON 文件中包含中文字符,你可以指定 ensure_ascii=False 参数,以确保不将中文字符转换为 Unicode 转义序列。
"""

二、ajax的get请求豆瓣电影前十页

 目标:下载豆瓣电影前十页的数据

知识点:问题的关键在于观察url的规律,然后迭代获取数据

1.设置url

找规律

点击top_list获取第一页的request url,复制url,点击清空,下拉滚动条,再次出现top_list时复制第二页的request url,重复操作,我们可以找到规律。

 观察链接,可以看到page和start之间的关系

# url 规律
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=0&limit=20'
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=20&limit=20'
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=40&limit=20'
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=60&limit=20'# page   1  2  3  4
# start  0  20 40 60

2.定义请求对象定制的函数

def create_request(page):base_url = 'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&'data={'start':(page-1)*20,'limit':20}data = urllib.parse.urlencode(data)url = base_url+dataheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"}# 请求对象的定制request = urllib.request.Request(url, headers=headers)return request

3.定义获取响应的数据的函数

def get_content(request):# 获取响应的数据response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content

4.定义下载函数

def down_load(content,page):with open('daouban_'+str(page)+'.json','w',encoding='utf-8') as file:file.write(content)

5.调用这些函数,完成数据抓取

start_page = int(input("请输入起始页码"))
end_page = int(input("请输入结束的代码"))for page in range(start_page, end_page+1):# 请求对象的定制request = create_request(page)# 获取响应的数据content = get_content(request)# 下载down_load(content,page)print(f"done_{page}")

完整代码

import urllib.request
import urllib.parse
# url 规律
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=0&limit=20'
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=20&limit=20'
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=40&limit=20'
'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&start=60&limit=20'# page   1  2  3  4
# start  0  20 40 60# 全部工作:下载豆瓣电影前十页的数据
# 请求对象的定制
# 获取响应的数据
# 下载数据def create_request(page):base_url = 'https://movie.douban.com/j/chart/top_list?type=17&interval_id=100%3A90&action=&'data={'start':(page-1)*20,'limit':20}data = urllib.parse.urlencode(data)url = base_url+dataheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"}# 请求对象的定制request = urllib.request.Request(url, headers=headers)return requestdef get_content(request):# 获取响应的数据response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return contentdef down_load(content,page):with open('daouban_'+str(page)+'.json','w',encoding='utf-8') as file:file.write(content)start_page = int(input("请输入起始页码"))
end_page = int(input("请输入结束的代码"))for page in range(start_page, end_page+1):# 请求对象的定制request = create_request(page)# 获取响应的数据content = get_content(request)# 下载down_load(content,page)print(f"done_{page}")

三、ajax的post请求肯德基官网

 目标:查询肯德基某地区餐厅前十页的信息

1.设置url

进入肯德基官网,点击餐厅查询,右键检查

网络 --> 名称 --> 标头 --> 请求URL

然后点击清空(左上角的 ∅),点击第二页,再次获取链接信息及负载中的表单数据,找规律

可以找到如下规律

pageIndex就是页码

# 第1页
# cname: 深圳
# pid:
# pageIndex: 1
# pageSize: 10# 第2页
# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# cname: 深圳
# pid:
# pageIndex: 2
# pageSize: 10

2.定义请求对象地址的函数

def create_request(page):base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'data={'cname': '深圳','pid': '','pageIndex': page,'pageSize': '10'}data = urllib.parse.urlencode(data).encode('utf-8')headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"}request = urllib.request.Request(base_url, data, headers)return  request

3.获取网页源码

def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content

4.下载

def download(content, page):with open ('kfc_'+str(page)+'.json','w',encoding='utf-8') as file:file.write(content)

5.调用函数

start_page = int(input('请输入起始页码'))
end_page = int(input('请输入结束页码'))
for page in range(start_page, end_page+1):# 请求对象定制response = create_request(page)# 获取网页源码content = get_content(response)# 下载1download(content, page)

完整代码:

import urllib.request
import urllib.parse# 第1页
# cname: 深圳
# pid:
# pageIndex: 1
# pageSize: 10# 第2页
# http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname
# cname: 深圳
# pid:
# pageIndex: 2
# pageSize: 10def create_request(page):base_url = 'http://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname'data={'cname': '深圳','pid': '','pageIndex': page,'pageSize': '10'}data = urllib.parse.urlencode(data).encode('utf-8')headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36 Edg/118.0.2088.76"}request = urllib.request.Request(base_url, data, headers)return  requestdef get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return contentdef download(content, page):with open ('kfc_'+str(page)+'.json','w',encoding='utf-8') as file:file.write(content)start_page = int(input('请输入起始页码'))
end_page = int(input('请输入结束页码'))
for page in range(start_page, end_page+1):# 请求对象定制response = create_request(page)# 获取网页源码content = get_content(response)# 下载1download(content, page)

参考

尚硅谷Python爬虫教程小白零基础速通(含python基础+爬虫案例)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/204022.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

zedbox 实现配置 yolov5

Stereolabs 的 ZED Box 是一款由 NVIDIA Jetson™ 提供支持的紧凑型网关,用于在移动和现场情况下挑战 AIoT(物联网)。它旨在将空间感知和理解带到边缘,并聚合、处理和分析来自 3D 传感器和设备的数据。 相关内容 1.win10下 cud…

下载加速器steam++

解决auto-py-to-exe打包文件时无法访问浏览器界面的问题。 下载地址:瓦特工具箱(Steam官网) - Watt Toolkit (steampp.net) 进入gitee后需要注册账号 3.0.0-rc.3 RMBGAME/SteamTools - Gitee.com 下载后安装即可 打开安装好的文件 成功打开

跨境电商危机公关:应对负面舆情的策略优化

随着跨境电商的快速发展,企业在全球市场中面临的竞争与挑战也日益复杂。在这个数字时代,负面舆情一旦爆发,可能对企业形象和经营造成深远影响。 因此,跨境电商企业需要建立有效的危机公关策略,以迅速、果断、有效地应…

R语言手册30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

如何衡量和提高测试覆盖率?

衡量和提高测试覆盖率,对于尽早发现软件缺陷、提高软件质量和用户满意度,都具有重要意义。如果测试覆盖率低,意味着用例未覆盖到产品的所有代码路径和场景,这可能导致未及时发现潜在缺陷,代码中可能存在逻辑错误、边界…

短剧分销系统开发:短剧分销推广

近两年内,随着短剧的发展,节奏快、剧情紧凑的短剧逐渐成为了大众的“新宠”。短剧行业也凭着成本低、投资低、周期短的优势成为了众多创业者的首要选择,越来越多的专业团队加入到短剧的赛道中。 根据数据显示,我国短剧市场规模有…

马尔科夫决策过程(Markov Decision Process)揭秘

RL基本框架、MDP概念 MDP是强化学习的基础。MDP能建模一系列真实世界的问题,它在形式上描述了强化学习的框架。RL的交互过程就是通过MDP表示的。RL中Agent对Environment做出一个动作(Action),Environment给Agent一个反馈&#xff…

JavaSE基础50题:6. 求出0~999之间的所有“水仙花数”并输出

概念 “水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身。 如:153 135333,则153是一个“水仙花数”。 【方法】 如何获得每一位的数:如(153) 个位: 153 % 10 3 十位: 153 / 10 15 15 % 10 5 百位: 153 / 100 1 代码 pu…

微信小程序动态加载图表[echart]

1.引入Echarts (1)将ec-canvas文件拷贝下来放到你自己的项目中: (2)在你需要使用Echarts的页面的json文件中引入Echarts "usingComponents": {"ec-canvas": "../utils/ec-canvas/ec-canva…

编织魔法世界——计算机科学的奇幻之旅

文章目录 每日一句正能量前言为什么当初选择计算机行业计算机对自己人生道路的影响后记 每日一句正能量 人生就像赛跑,不在乎你是否第一个到达尽头,而在乎你有没有跑完全程。 前言 计算机是一个神奇的领域,它可以让人们创造出炫酷的虚拟世界…

智能成绩表 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题目描述 小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗? 输入描述 第1行输入两个整数,学生人数n和科目数量m。0<n<100,0<m<10 第2行输入m个科目名称,彼此之间用空格隔开。科目名称只由英文…

基于SSM框架的购物商城系统论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此商城购物信息的…

Python集合魔法:解锁数据去重技巧

. 在Python编程的魔法世界中&#xff0c;有一种数据类型几乎被忽视&#xff0c;但却拥有强大的超能力&#xff0c;那就是集合&#xff08;Set&#xff09;。 集合是一种无序、唯一的数据类型&#xff0c;它以其独特的特点在编程世界中独占一席之地。 1. 集合的定义和特点 集…

androidstudio设置内存

androidstudio一直 scanning files to index&#xff0c;需要去设置内存&#xff1a; 操作如下&#xff1a;

HASH 哈希算法之MD5 算法

1. 哈希算法&#xff0c;用C 写的 #include <iostream> #include <iomanip> #include <cstring> #include <openssl/md5.h> #include <stdio.h>using namespace std;int main() {string str "hello world";unsigned char digest[MD5…

最常见的直流负载工作方式

直流负载工作方式是指在电力系统中&#xff0c;直流电源为负载提供电能的方式。在实际应用中&#xff0c;直流负载工作方式有很多种。 直接供电方式&#xff1a;这是最简单的直流负载工作方式&#xff0c;即直流电源直接为负载提供电能。这种方式适用于负载较小、对电源稳定性要…

都在卷,你今天卷了吗?带给你一个python 拦截利器,不用是你的损失

本文是一个较为完整的 mitmproxy 教程&#xff0c;侧重于介绍如何开发拦截脚本&#xff0c;帮助读者能够快速得到一个自定义的代理工具。 本文假设读者有基本的 python 知识&#xff0c;且已经安装好了一个 python 3 开发环境。如果你对 nodejs 的熟悉程度大于对 python&#…

API接口使用方法(封装好的电商平台)

为了进行此平台API的调用&#xff0c;首先我们需要做下面几件事情。 1、 获取一个KEY。 点击获取 2、 参考API文档里的接入方式和示例。 3、查看测试工具是否有需要的接口&#xff0c;响应实例的返回字段是否符合参数要求。 4、利用平台的文档中心和API测试工具&#xff0c…

MATLAB - 绘制立体图(平面+水深)

目录 代码结果 代码 % 在 X-Y 平面上绘图 % 正常绘制平面图 [X,Y,Z] peaks; contour(X,Y,Z,20); hold on% ****重点******************************************** % 改为三维视图&#xff0c;具体可以help % view(3); %此时的平面图对应z0 &#xff1b;默认az-37.5&#x…

网工学习9-STP配置(二)

如图 1 所示&#xff0c;当前网络中存在环路&#xff0c; SwitchA 、SwitchB 、SwitchC 和 SwitchD 都运行 STP&#xff0c;通过 彼此交互信息发现网络中的环路&#xff0c;并有选择的对某个端口进行阻塞&#xff0c;最终将环形网络结构修剪成无 环路的树形网络结构&#xff…