Python爬虫——Urllib库-3

目录

ajax的get请求

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

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

ajax的post请求

总结


ajax的get请求

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

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

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

再加上UA这个header

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

详细代码如下:

# get请求
# 获取豆瓣电影第一页的数据并且保存起来
import urllib.request

url = '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.request

url = '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 + data
    print(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~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ssm个人学习01

Spring配置文件: spring环境的搭建: 1:导入对应的spring坐标 也就是依赖 2:编写controller, service, dao相关的代码 3:创建配置文件(在resource下面配置文件) 例如:applicationContext.xml <bean id "" class ""> <property name "&…

共同学习|Spring Cloud Alibaba一一Nacos配置

Nacos配置中心 在服务或者应用运行过程中&#xff0c;提供动态配置或者元数据以及配置管理的服务提供者。 从Nacos中拉去配置文件 pom文件 2、bootstrap.yml 修改application.yml为bootstrap.yml spring:cloud: nacos:config:server-addr: localhost:8848 #nacos服务地址…

nginx,php-fpm

一&#xff0c;Nginx是异步非阻塞多进程&#xff0c;io多路复用 1、master进程&#xff1a;管理进程 master进程主要用来管理worker进程&#xff0c;具体包括如下4个主要功能&#xff1a; &#xff08;1&#xff09;接收来自外界的信号。 &#xff08;2&#xff09;向各worker进…

代码随想录刷题笔记 DAY 35 | 无重叠区间 No.435 | 划分字母区间 No.763 | 合并区间 No.56

文章目录 Day 3501. 无重叠区间&#xff08;No. 435&#xff09;<1> 题目<2> 笔记<3> 代码 02. 划分字母区间&#xff08;No. 763&#xff09;<1> 题目<2> 笔记<3> 代码 03. 合并区间&#xff08;No. 56&#xff09;<1> 题目<2&g…

GoFrame:如何简单地搭建一个简单地微服务

一切资料来源于GoFrame官网&#xff0c; 感兴趣的&#xff0c; 可以直接去官网查阅相关资料。 首先下载框架工具&#xff0c; 下载地址&#xff1a;https://github.com/gogf/gf/releases 然后进入你想要放置的项目文件夹&#xff0c; 执行命令行 gf init {project_name} #pr…

Unity AI生成全景图制作天空盒

现在的AI很强大。 其中&#xff0c;有这样一个网站&#xff0c;通过输入提示词&#xff0c;选择某种风格就可以为你生成360全景图。 网页链接 一、生成全景图 打开网页后&#xff0c;如图&#xff1a; 勾选&#xff0c;点击CONFIRM。 点击GET STARTED&#xff0c;进入主页。…

编译链接实战(25)ThreadSanitizer检测线程安全

ThreadSanitizer&#xff08;又称为TSan&#xff09;是一个用于C/C的数据竞争检测器。在并发系统中&#xff0c;数据竞争是最常见且最难调试的错误类型之一。当两个线程并发访问同一个变量&#xff0c;并且至少有一个访问是写操作时&#xff0c;就会发生数据竞争。C11标准正式将…

XSS初级漏洞靶场

一、环境的搭建 可以在githb上找靶机包&#xff0c;使用小皮面板搭建在自己本机 与此文章类似&#xff08;放在www目录下&#xff09; 二、XSS漏洞简介 1、什么是xss漏洞 当用户访问被xss注入的网页&#xff0c;xss代码就会被提取出来。用户浏览器就会解析这段xss代码&…

每日一题 — 复写零

1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 首先找到最后一个复写的数&#xff1a; 双指针算法&#xff1a; 1、先判断 cur 位置上的值 2、然后决定 dest 移动一步还是两步 3、然后判断 dest 是否到终点了 4、最后 cur 处理越界的情况 arr[n-1] …

【C初阶】预处理

前言&#xff1a;在本文中&#xff0c;我将系统的整理一下C语言关于预处理部分的语法&#xff0c;便于整理与回归。 1.预定义符号 在C语言中&#xff0c;C标准提供里一些C预定义符号&#xff0c;在预处理期间完成&#xff0c;可以直接使用。 有如下几个符号&#xff1a; 2.#…

广搜(BFS)

在我们日常刷题的过程中&#xff0c;我们会通过遍历来获取自己想要的数组&#xff0c;搜索算法就是典型的一种。 而搜索算法中也分深搜&#xff08;DFS&#xff09;&#xff0c;广搜&#xff08;BFS&#xff09;,而今天&#xff0c;我们来说说广搜。 什么是广搜 广搜全称叫广…

SqlServer配置定时备份

在企业系统环境中&#xff0c;为了确保SQL Server数据库受到意外的人为错误、系统故障、病毒攻击等因素的影响&#xff0c;我们通常会选择定期备份数据库。但是随着时间尺度的拉长&#xff0c;如果每次备份都要去手动执行一次的话&#xff0c;可能会觉得有些麻烦&#xff0c;或…

【《高性能 MySQL》摘录】第 9 章 操作系统和硬件优化

文章目录 9.1 什么限制了MySQL的性能9.2 如何为 MySQL 选择 CPU9.2.1 哪个更好&#xff1a;更快的 CPU 还是更多的 CPU9.2.2 CPU架构9.2.3 扩展到多个CPU和核心 9.3 平衡内存和磁盘资源9.3.1 随机 I/O 和顺序 I/O9.3.2 缓存&#xff0c;读和写9.3.3 工作集是什么9.3.4 找到有效…

JMeter性能测试基本过程及示例

jmeter 为性能测试提供了一下特色&#xff1a; jmeter 可以对测试静态资源&#xff08;例如 js、html 等&#xff09;以及动态资源&#xff08;例如 php、jsp、ajax 等等&#xff09;进行性能测试 jmeter 可以挖掘出系统最大能处理的并发用户数 jmeter 提供了一系列各种形式的…

P4715 【深基16.例1】淘汰赛题解

题目 有&#xff08;n≤7&#xff09;个国家参加世界杯决赛圈且进入淘汰赛环节。已经知道各个国家的能力值&#xff0c;且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1号国家和2号国家踢一场比赛&#xff0c;胜者晋级。3号国家和4号国家也踢一场&#xff0c;…

node.js最准确历史版本下载

先进入官网:Node.js https://nodejs.org/en 嫌其他博客多可以到/release下载:Node.js,在blog后面加/release https://nodejs.org/en/blog/release/ 点击next翻页,同样的道理

值得一试的五大AI编程助手

AI编程助手已成为开发过程中不可缺少的一部分&#xff0c;因为它们可以协助代码生成、理解、项目搜索以及使用提示或代码执行各种任务。甚至像谷歌Colab和Deepnote这样的云IDE平台也提供AI辅助编程&#xff0c;可以帮助您生成代码并解决问题。 本文将介绍5款值得一试的AI编程助…

外贸福利 PHP源码 WhatsApp 营销 - 批量发件人、聊天、机器人、SaaS 搭建

WhatsApp 营销工具对于外贸人员来说至关重要。随着全球贸易的不断发展&#xff0c;WhatsApp已成为了许多国际贸易商之间沟通的首选工具之一。通过利用WhatsApp营销工具&#xff0c;外贸人员可以轻松地与客户建立联系&#xff0c;传递产品信息&#xff0c;进行价格谈判&#xff…

智能分析网关V4安全帽检测/反光衣检测/通用工服检测算法及应用

TSINGSEE青犀视频智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件管理平台支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常…

【Spring Boot 3】的安全防线:整合 【Spring Security 6】

简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Sp…