爬虫requests+综合练习详解

Day2 - 1.requests第一血_哔哩哔哩_bilibili

requests作用:模拟浏览器发请求

requests流程:指定url -> 发起请求 -> 获取响应数据 -> 持续化存储

爬取搜狗首页的页面数据

import requests# 指定url
url = 'https://sogou.com'
# 发起请求
response = requests.get(url)
# 获取响应数据,text返回字符串形式的响应数据
page_txt = response.text
# 持久化存储
with open('./sogpu.html', 'w', encoding='utf-8') as fp:fp.write(page_txt)

简易网页采集器

输入关键词后,爬取搜索结果的页面信息

https://www.sogou.com/web?query=%E8%B5%B5%E6%B5%A9%E7%84%B6&_asf=www.sogou.com&_ast=&w=01019900&p=40040100&ie=utf8&from=index-nologin&s_from=index&sut=2106&sst0=1705812059807&lkt=0%2C0%2C0&sugsuv=1705811188521571&sugtime=1705812059807

把url中多余的参数去掉

https://www.sogou.com/web?query=%E8%B5%B5%E6%B5%A9%E7%84%B6

这里的中文变成了乱码,无需处理,当然想手动换成中文也行

为了使关键词可变,需要处理url携带的参数:封装到字典中

再把url中的参数删干净https://www.sogou.com/web

import requestsurl = 'https://www.sogou.com/web'
keyword = input()
param = {'query': keyword
}
response = requests.get(url, params=param)
page_txt = response.text
filename = keyword+'.html'
with open(filename, 'w', encoding='utf-8') as fp:fp.write(page_txt)

UA伪装

此次案例中需要介绍一种反扒机制——UA检测

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

UA检测:门户网站的服务器会检测对应请求的载体身份标识,如果检测到载体身份标识为某一款浏览器,则认为是正常的请求;否则认为是不正常的请求

UA伪装:将对应的User-Agent封装到headers字典中

f12或者检查页面,找到网络部分,先清楚网络日志再刷新页面,找到需要的请求对应的UA

然后把这个headers字典放入get请求中

import requestsheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0'
}
url = 'https://www.sogou.com/web'
keyword = input()
param = {'query': keyword
}
response = requests.get(url, params=param, headers=headers)
page_txt = response.text
filename = keyword+'.html'
with open(filename, 'w', encoding='utf-8') as fp:fp.write(page_txt)

破解百度翻译

爬取百度翻译中,对应单词翻译的结果

由于我们不是想要爬取整个页面,而是爬取页面中的部分信息,经常需要用到数据解析

但不使用数据解析也能获取局部信息,这次我们就不使用

从上面两张图我们可以看出,输入单词后页面做了一个局部的刷新,我们知道局部的刷新是可以通过Ajax实现的,也就意味着我们在文本框中输入字符后,会自动进行Ajax的请求发送,Ajax请求成功后会对页面进行局部刷新

经过分析,我们是不是应该利用抓包工具,捕获一下对应的Ajax请求

点击XHR,XHR中对应的是Ajax请求的数据包

输入dog

在xhr类型中一个个找

查看post请求携带的参数是d,不清楚是什么东西,所以接着往下看

三个sug包对应的是每输入一个字符后的Ajax请求,我们需要的是dog的翻译结果,所以要抓最后一个sug包

这样我们就拿到了请求的url,Content-Type这里是指我们输入一个字符后,服务器端响应回来的是一组json串

分析总结

(1)post请求(携带了参数)

(2)响应数据是一组json数据

import requests
import jsonpost_url = 'https://fanyi.baidu.com/sug'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36 HBPC/12.1.3.303'
}
word = input()
data = {'kw': word
}
response = requests.post(url=post_url, data=data, headers=headers)
# 响应数据是json数据,如果继续使用.text获取的是一组字符串形式的json,而.json返回的是一个obj,json是什么对象就是什么对象,在这里是字典
dict_obj = response.json()
# 由于是字典对象,所以不能直接write
filename = './' + word + '.json'
fp = open(filename, 'w', encoding='utf-8')
json.dump(dict_obj, fp, ensure_ascii=False)  # 字典中有中文,不用ascii编码

豆瓣电影排名

爬取豆瓣电影某一分区的电影排名,以喜剧片为例

第一种方法:利用数据解析,如果对当前url进行整个页面信息的爬取,则能拿到页面信息,再利用数据解析就可以获取电影名、主演名、上映时间等等信息

第二种方法:思考它会不会像百度翻译一样,使用Ajax请求进行局部刷新呢?我们用滚轮滑到底部

发现新的电源被加载出来了,滚轮回到中间,但是我们的url并没有改变,所以确实是一个Ajax请求

加载新电影时果然捕获了一个Ajax请求,GET请求且携带了5个参数,服务器端返回json串

5个参数中,我们大概可以猜测出来start和limit含义:

start:从豆瓣数据库中第几部电源开始取出来

limit:取多少部

在响应中看到json串是列表对象

import requests
import jsonurl = 'https://movie.douban.com/j/chart/top_list'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0'
}
param = {'type': '24','interval_id': '100:90','action': '','start': '0',  # 从豆瓣数据库中第几部电源开始取出来'limit': '20'  # 一次取多少部
}
response = requests.get(url, params=param, headers=headers)list_obj = response.json()fp = open('douban_movie.json', 'w', encoding='utf-8')
json.dump(list_obj, fp, ensure_ascii=False)

肯德基餐厅查询

肯德基官方网站 - Welcome to KFC.com.cn

爬取肯德基餐厅位置

输入关键字后发现url并没有改变,说明是Ajax请求

import requests
from bs4 import BeautifulSoupurl = 'https://www.kfc.com.cn/kfccda/ashx/GetStoreList.ashx?op=keyword'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0'
}
word = input()
data = {'cname': '','pid': '','keyword': word,'pageIndex': '1','pageSize': '10'
}
response = requests.post(url, data=data, headers=headers)
text = response.textwith open('kfc_' + word + '.html', 'w', encoding='utf-8') as fp:fp.write(text)

国家药监局化妆品生产许可证

由于找不到网站在哪,所以无法敲代码实战,以下是需求分析:

 

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

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

相关文章

Leetcode刷题笔记题解(C++):670. 最大交换

思路: 假设数字 9923676 从右边找最大的数字的下标maxindex,然后向左边寻找小于最大数字的数的下标,直到找到最左边,交换两者得出新的数字,比如从左到右递减的数字如9621则不需要变化,在寻找中记录这种数…

系统问题排查定位流程

1. 系统问题排查范围定义 本次交流中描述的故障,主要是指系统级别的故障,对于某个具体的业务功能的故障,不在本次讨论范围内。下面描述的故障定位、排查,主要是指跨模块、跨项目级别的故障的定位、排查,包括软件、硬件…

LeetCode 热题 100 | 滑动窗口

目录 1 3. 无重复字符的最长子串 2 438. 找到字符串中所有字母异位词 菜鸟做题第二周,语言是 C 1 3. 无重复字符的最长子串 解题思路: 设置两个指针,左指针和右指针,二者之间形成窗口右指针不断右移,新字母被纳…

阿里云优惠整理,最新2024阿里云优惠政策解读

阿里云优惠政策有哪些?2024年阿里云优惠政策风向改了,之前一直是老用户与狗的营销策略,今年阿里云2核2G、3M固定带宽服务器99元居然开启了老用户购买权限,并且续费不涨价,阿里云这波操作确实让用户赢麻了,在…

X-Bogus加密参数分析与jsvmp算法(仅供学习)

文章目录 1. 抓包分析2. X-Bogus参数分析 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫…

任意模数多项式乘法MTT(可拆系数FFT)详解

更好的阅读体验 任意模数多项式乘法 前言: 在教练讲的时候脑子并不清醒,所以没听懂。后来自己看博客学会了,但目前只学了一种方法:可拆系数FFT。为了方便日后复习,决定先写下这个的笔记,关于三模数NTT下次…

【Linux】常见指令(一)

前言: Linux有许多的指令,通过学习这些指令,可以对目录及文件进行操作。 文章目录 一、基础指令1. ls—列出目录内容2. pwd—显示当前目录3. cd—切换目录重新认识指令4. touch—创建文件等5. mkdir—创建目录6. rmdir指令 && rm 指令7. man—显…

【胡寿松 自动控制原理】【考研冲刺加分神器】各院校考研例题详细讲解

声明:本人水平有限,博客可能存在部分错误的地方,请广大读者谅解并向本人反馈错误。    本专栏中包含【胡寿松 自动控制原理】专业课的例题讲解,适合考研冲刺阶段学习,该视频只适合作为辅助教学视频来使用&#xff0c…

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock 一种情况说明 挂载ISO文件进入救援模式,无法挂载XFS文件系统,xfs_repair也是报未知的超级块 使用 xfs_info 可以取到 xfs文件系统分区信息 xfs_db -c “sb 0” -c “p” $your_xfs_dev 也能…

笔试面试题——二叉树进阶(三)

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、二叉树的前序非递归遍历1、题目讲解2、思路讲解3、代码实现 二、二叉树的中序非递归遍历1…

GitHub README-Template.md - README.md 模板

GitHub README-Template.md - README.md 模板 1. README-Template.md 预览模式2. README-Template.md 编辑模式References A template to make good README.md. https://gist.github.com/PurpleBooth/109311bb0361f32d87a2 1. README-Template.md 预览模式 2. README-Templat…

go语言(十三)-----interface

一、Interface 通用万能类型 空接口int,string,float,struct都实现了interface都可以用interface{}类型,引用任意的数据类型 package mainimport "fmt"//interface()是万能数据类型 func myFunc(arg interface{}) {fmt.Println(&…

续签KES证书

MiniO KES(密钥加密服务)是 MinIO 开发的一项服务,旨在弥合在 Kubernetes 中运行的应用程序与集中式密钥管理服务 (KMS) 之间的差距。中央 KMS 服务器包含所有状态信息,而 KES 在需要执行与获取新密钥或更新…

Med-YOLO:3D + 医学影像 + 检测框架

Med-YOLO:3D 医学影像 检测框架 提出背景设计思路网络设计训练设计讨论分析 魔改代码:加强小目标检测总结 提出背景 论文链接:https://arxiv.org/abs/2312.07729 代码链接:https://github.com/JDSobek/MedYOLO 提出背景&…

一文梳理Windows自启动位置

不同版本的Windows开机自启动的位置略有出入,一般来说,Windows自启动的位置有:自启动文件夹、注册表子键、自动批处理文件、系统配置文件等。如果计算机感染了木马,很有可能就潜伏于其中!本文将说明这些常见的Windows开…

理想架构的非对称高回退Doherty功率放大器理论与仿真

Doherty理论—理想架构的非对称高回退Doherty功率放大器理论与仿真 参考: 三路Doherty设计 01 射频基础知识–基础概念 Switchmode RF and Microwave Power Amplifiers 目录 Doherty理论---理想架构的非对称高回退Doherty功率放大器理论与仿真0、高回退Doherty功率…

UVT音乐证书考试时间确定,学习氛围渐浓

美国职业资格与人才管理中心(UVT)音乐证书考试时间正式确定,学习氛围逐渐浓厚。众多热爱音乐的从业者和学生开始积极备考,希望通过这一考试获得音乐领域的宝贵证书。音乐证书被认为是音乐人才展示个人专业水平的重要机会&#xff…

【K8S 云原生】K8S的包包管理器-helm

目录 一、helm概念 1、什么是helm 2、helm的概念: 二、实验部署: 1、安装helm: 2、对chart仓库的基本使用: 2.1、查看和更新chart仓库 2.2、安装chart 2.3、卸载chart: 3、helm自定义模版: 3.1、…

常规二分查找中遇到的问题

以前我们写二分查找的时候&#xff0c;是这么写的&#xff1a; public static int binarySearch2(int []a,int target){int i0,ja.length-1;while(i<j){int mid(ij)/2;if(a[mid]target){return mid;}else if(a[mid]<target){imid1;}else {jmid-1;}}return -1;} 这么写&…

签名不对,请检查包名是否与开放平台上填写的一致。微信分享 errorCode 为-6(方法有两种)

微信分享 errorCode 为-6 解决办法1.自己编译&#xff0c;把MD5加密文件改成小写且去掉&#xff1a;如下图 解决方法2 下载GenSignature 输入包名 然后生成应用签名 在微信开放平台创建应用&#xff0c;填写应用签名