Python爬虫——Urllib库-3

目录

ajax的get请求

获取豆瓣电影第一页的数据并保存到本地

获取豆瓣电影前十页的数据

ajax的post请求

总结


ajax的get请求

获取豆瓣电影第一页的数据并保存到本地

首先可以在浏览器找到发送数据的接口

那么我们的url就可以在header中找到了

再加上UA这个header

进行请求对象的定制,模拟浏览器发送请求即可

详细代码如下:

# get请求
# 获取豆瓣电影第一页的数据并且保存起来
import urllib.requesturl = 'https://movie.douban.com/j/chart/top_list?type=13&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/122.0.0.0 Safari/537.36'
}# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)# 模拟浏览器发送请求,获取响应的数据
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
# print(content)# 将数据下载到本地
# open方法默认使用GBK,但是我们前面使用的是utf-8,那么这里
# 需要将编码格式指定为utf-8
fp = open('douban.json', 'w', encoding='utf-8')
fp.write(content)# get请求
# 获取豆瓣电影第一页的数据并且保存起来
import urllib.requesturl = 'https://movie.douban.com/j/chart/top_list?type=13&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/122.0.0.0 Safari/537.36'
}# 请求对象的定制
request = urllib.request.Request(url=url, headers=headers)# 模拟浏览器发送请求,获取响应的数据
response = urllib.request.urlopen(request)
content = response.read().decode('utf-8')
# print(content)# 将数据下载到本地
# open方法默认使用GBK,但是我们前面使用的是utf-8,那么这里
# 需要将编码格式指定为utf-8
fp = open('douban.json', 'w', encoding='utf-8')
fp.write(content)

这就下载下来了


获取豆瓣电影前十页的数据

首先我们找到第一次的刷新数据的请求url:

https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=0&limit=20

然后是第二次的:

https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=20&limit=20

然后是第三次的:
https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&start=40&limit=20

        如果你观察这几个URL后面的参数的话,你就可以发现问题了,start每次都累加上limit,通过改变起始索引来挨个查询,这个在Java开发中经常会有这种代码,那么它查询的方法就已经是显而易见了。

所以可以得出start的值是:(page - 1) * 20

然后就可以写出下面的代码了:

# get请求
# 下载豆瓣电影前十页的数据
import urllib.request
import urllib.parse"""得到不同pages的request
"""
def create_request(page):base_url = 'https://movie.douban.com/j/chart/top_list?type=13&interval_id=100%3A90&action=&'data = {'start': (page - 1) * 20,'limit': 20}data = urllib.parse.urlencode(data)url = base_url + dataprint(url)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36'}request = urllib.request.Request(url=url, headers=headers)return request"""得到返回的内容content
"""
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content"""将得到的内容写入本地
"""
def down_load(page, content):fp = open('douban_' + str(page) + '.json', 'w', encoding='utf-8')fp.write(content)"""主方法
"""
if __name__ == '__main__':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)# download下载down_load(page, content)

然后就完美得到了所有的数据了 


ajax的post请求

对肯德基官网的餐厅位置进行爬取

这为什么是一个ajax发送的数据呢,因为这里有一个ajax的核心对象

然后就通过URL和header就可以得到下面的代码,并没有新的东西 ,都是前面的知识点的整合。

# post请求
# 肯德基官网
import urllib.request
import urllib.parse# 第一页
# https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# cname: 哈尔滨
# pid:
# pageIndex: 1
# pageSize: 10# 第二页
# https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=cname# cname: 哈尔滨
# pid:
# pageIndex: 2
# pageSize: 10"""请求对象定制
"""
def create_request(page):base_url = 'https://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/122.0.0.0 Safari/537.36'}request = urllib.request.Request(url=base_url, headers=headers, data=data)return request"""获取网页内容
"""
def get_content(request):response = urllib.request.urlopen(request)content = response.read().decode('utf-8')return content"""下载内容到本地
"""
def down_load(page, content):fp = open('KFC' + str(page) + ".json", 'w', encoding='utf-8')fp.write(content)if __name__ == '__main__':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(page, content)

总结

累了,没有总结,再见兄弟们ヾ( ̄▽ ̄)Bye~Bye~

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

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

相关文章

Facebook的元宇宙实践:数字化社交的新前景

近年来,元宇宙(Metaverse)这一概念备受瞩目,被认为是数字化社交的未来趋势之一。而在众多科技巨头中,Facebook(现更名为Meta)一直处于元宇宙发展的前沿。在本文中,我们将深入探讨Fac…

万字带你走过数据库的这激荡的三年

本文收集了卡内基梅隆大学计算机科学系数据库学副教授 Andy Pavlo 从 2021 到 2023 连续三年对数据库领域的回顾,希望通过连续三年的回顾让你对数据库领域的技术发展有所了解。 关于 Andy Pavlo:卡内基梅隆大学计算机科学系数据库学副教授,数…

vuepress项目侧边栏菜单配置使用

第一种菜单配置,自定义菜单名称 {text: 菜单名称,// 是否折叠collapsible: true,children: [{text: "自定义md菜单名称",sidebarDepth: 2,link: "/xxx/aa.md",children: [],}],},第二种菜单配置 标题自动生成菜单,使用需要搭配sideb…

c语言求矩阵的局部极大值

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。 输入格式: 输入在第一行中给出矩阵A的行数M和列数N(3≤…

C语言创建结构体时 什么时候需要C++引用 什么情况下下不需要引用

在C语言中,结构体通常通过传递指针来实现对结构体的修改。当在函数中需要修改结构体的内容,并且希望这些修改在调用函数后仍然保持,可以考虑使用指针。引用是C中的一种特殊机制,用于更方便地传递参数,但在纯粹的C语言中…

《springcloud alibaba》 三 sentinel流量控制

目录 sentinel准备流控规则 qpspom.xmlapllication.yml启动类controller查看结果流控提示不太友好 流控规则 线程数全局异常处理pom.xmlapplication.yml启动类实体类controller类异常类测试 关联流控模式关联jmeter 链路servicecontroller代码调整 流控效果Warm UP 熔断降级规则…

[Flutter]用16进制颜色字符串初始化Color

使用: // 使用Color的静态方法 fromARGB() 来创建颜色对象。透明度为 255(完全不透明) Color a Color.fromARGB(255, 42, 35, 72); // 使用八位的十六进制数来表示颜色,其中前两位表示透明度,后六位表示红色、绿色和…

本科毕业设计:计及并网依赖性的分布式能源系统优化研究。(C语言实现)(内包含NSGA II优化算法)(二)

目录 前言 1、sofc函数 2、光伏板函数 3、集热场函数 4、sofc电跟随策略函数 5、二分法找sofc运行点函数 6、目标函数:成本 7、目标函数:二氧化碳排放量 8、目标函数:并网依赖性 前言 本篇文章介绍的是我的毕业设计,我将C…

JavaScript DOM操作笔记记录回忆总结

一、什么是DOM? 1、通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。 2、当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model) 二、操作DOM 1、在操作DOM之前,我们需要先获取到…

DOM 创建节点、添加节点和删除节点

创建元素节点 document.createElement(‘标签名’) 创建文本节点document.createTextNode ( 内容 ) 根据传入的标签名创建出一个空的元素对象创建出来的默认不显示,要成为别人的子元素才能显示,所以要结合appendChild使用 添加节点(后面&am…

团体程序设计天梯赛 L2-001 紧急救援(迪杰斯特拉算法)

L2-001 紧急救援 分数 25 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&…

python笔记_运算符

A,算术运算符 运算符描述举例结果加011-减2-11*乘1*11/除1/11%取模(取余)6%51(余1)//除,且向下取整 3//2 -1//2 1 -1 **返回x的y次幂2**01 取模运算公式 a % b a - a // b * b print(-10%…

【复现】蓝凌OA SQL注入漏洞_61

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一: 四.修复建议: 五. 搜索语法: 六.免责声明 一.概述 蓝凌智能OA是由深圳市蓝凌软件股份有限公司开发,是一款针对中小企业的移动化智能办公产品,融合了钉钉数字…

C习题002:澡堂洗澡【仅供参考】

问题 输入样例 在这里给出一组输入。例如&#xff1a; 2 5 1 3 3 2 3 3 输出样例 在这里给出相应的输出。例如&#xff1a; No代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 代码 #include<stdio.h> int main() {int N,W,s,t,p;int arr_s[…

递归算法题练习(数的计算、带备忘录的递归、计算函数值)

递归的介绍 概念:递归是指函数直接或间接调用自身的过程。 解释递归的两个关键要素: 基本情况(递归终止条件):递归函数中的一个条件&#xff0c;当满足该条件时&#xff0c;递归终止&#xff0c;避免无限递归。可以理解为直接解决极小规模问题的方法。递归表达式(递归调用):递…

k8s 中 namspace deployment pod services 之间的关系

在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;Namespace&#xff08;命名空间&#xff09;是一种用于将集群内部资源划分为不同逻辑组的机制。Deployment、Pod和Service是Kubernetes中常见的资源&#xff0c;它们之间的关系如下&#xff1a; Namespace&#xff08;命…

网络安全攻防演练:企业蓝队建设指南

第一章 概述 背景 网络实战攻防演习是当前国家、重要机关、企业组织用来检验网络安全防御能力的重要手段之一,是对当下关键信息系统基础设施网络安全保护工作的重要组成部分。网络攻防实战演习通常是以实际运行的信息系统为攻击目标,通过在一定规则限定下的实战攻防对抗,最…

认识通讯协议——TCP/IP、UDP协议的区别,HTTP通讯协议的理解

目录 引出认识通讯协议1、TCP/IP协议&#xff0c;UDP协议的区别2、HTTP通讯协议的讲解 Redis冲冲冲——缓存三兄弟&#xff1a;缓存击穿、穿透、雪崩缓存击穿缓存穿透缓存雪崩 总结 引出 认识通讯协议——TCP/IP、UDP协议的区别&#xff0c;HTTP通讯协议的理解 认识通讯协议 …

第九届数学与人工智能国际会议 (ICMAI 2024)即将召开!

2024年第九届数学与人工智能国际会议将于2024年5月10-12日在中国北京召开。本届会议由北京工业大学主办&#xff0c;旨在促进应用逻辑、算法与复杂性研究&#xff0c;使用数学的方法促进人工智能理论与应用发展&#xff0c;加深学术交流与合作。我们热忱欢迎从事相关技术研究的…

开源WIFI继电器之使用说明

1、设备说明 1.1外观 1.2供电 100~240V交流输入&#xff0c;Lin接火线&#xff0c;Nin接零线。 1.3连接负载 输出信号为继电器无源信号&#xff0c;用于信号的导通和断开控制&#xff0c;最大可通过10A负载电流&#xff0c;COM为继电器公共端&#xff0c;NO为继电器常开端&a…