Python爬虫学习

news2025/2/2 20:49:05

文章目录

  • 前言
  • 概述
  • 简单爬虫
    • requests模块⼊⻔
  • 数据解析
    • re解析
    • re模块
  • 总结


前言

本博客仅做学习笔记,如有侵权,联系后即刻更改

科普:


学习参考网站

概述

安全

爬⾍在法律上是不被禁⽌的

  • 像王欣说过,技术是⽆罪的. 主要看你⽤它来⼲嘛

robots.txt协议

  • 规定了⽹站中哪些数据可以被爬⾍爬取,哪些数据不可以被爬取
    在这里插入图片描述

简单爬虫

urllib爬取百度首页

from urllib.request import urlopen
resp = urlopen("http://www.baidu.com") # 打开 百度
# print(resp.read().decode("utf-8")) # 打印 抓取到
的内容
with open("baidu.html",mode="w", encoding="utf-8")
as f: # 创建⽂件
 f.write(resp.read().decode("utf-8")) # 保存在
⽂件中

web请求过程

浏览器渲染

  • 请求到服务器的时候
    服务器直接把数据全部写⼊到html中, 我们浏览器就能直接拿到带有数据的html内容

客户端渲染

  • 是第⼀次请求服务器返回⼀堆HTML框架结构
    然后再次请求到真正保存数据的服务器, 由这个服务器返回数据, 最后在浏览器上对数据进⾏加载

HTTP协议

Hyper Text Transfer Protocol(超⽂本传输协议)

  • ⽤于从万维⽹(WWW:World Wide Web )服务器传输超⽂本(HTML)到本地浏览器的传送协议

请求和响应都分为三部分

请求头中重要部分

  1. User-Agent : 请求载体的身份标识(⽤啥发送的请求)
  2. Referer: 防盗链(这次请求是从哪个⻚⾯来的? 反爬会⽤到)
  3. cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)

响应头中⼀些重要的内容:

  1. cookie: 本地字符串数据信息(⽤户登录信息, 反爬的token)
  2. 各种神奇的莫名其妙的字符串(⼀般都是token字样, 防⽌各种攻击和反爬)

请求方式分为get和post(隐式提交)
在这里插入图片描述在这里插入图片描述

requests模块⼊⻔

第三⽅模块requests

  • 这个模块的优势就是⽐urllib还要简单, 并且处理各种请求都⽐较⽅便

使用方法

既然是第三⽅模块, 那就需要我们对该模块进⾏安装

  • pip install requests

如果安装速度慢的话可以改⽤国内的源进⾏下载安装.

  • pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

爬取搜狗搜索

# 案例1. 抓取搜狗搜索内容
kw = input("请输⼊你要搜索的内容:")
response =
requests.get(f"https://www.sogou.com/web?query=
{kw}") # 发送get请求
# print(response.text) # 直接拿结果(⽂本)
with open("sogou.html", mode="w", encoding="utf8") as f:
 f.write(response.text)

爬取百度翻译

注意百度翻译这个url不好弄出来. 记住, 在输⼊的时候, 关掉各种输⼊法,要⽤英⽂输⼊法, 然后不要回⻋. 就能看到这个sug了
在这里插入图片描述

# 案例2.抓取百度翻译数据
# 准备参数
kw = input("请输⼊你要翻译的英语单词:")
dic = {
 "kw": kw # 这⾥要和抓包⼯具⾥的参数⼀致.
}
# 请注意百度翻译的sug这个url. 它是通过post⽅式进⾏提交. 所以我们也要模拟post请求
resp =
requests.post("https://fanyi.baidu.com/sug",
data=dic)
# 返回值是json 那就可以直接解析成json
resp_json = resp.json()
# {'errno': 0, 'data': [{'k': 'Apple', 'v': 'n.
苹果公司,原称苹果电脑公司'....
print(resp_json['data'][0]['v']) # 拿到返回字典中的
内容

爬取豆瓣

有⼀些⽹站在进⾏请求的时候会校验你的客户端设备型号

# 案例3: 抓取⾖瓣电影
url = 'https://movie.douban.com/j/chart/top_list'
param = {
 'type': '24',
 'interval_id': '100:90',
 'action':''
,
 'start': '0',#从库中的第⼏部电影去取
 'limit': '20',#⼀次取出的个数
}
headers = {
 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel
Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like
Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
response =
requests.get(url=url,params=param,headers=headers
)
list_data = response.json()
fp = open('./douban.json','w',encoding='utf-8')
json.dump(list_data,fp=fp,ensure_ascii=False)
print('over!!!')

数据解析

网页数据提取

  1. re解析
  2. bs4解析
  3. xpath解析
    这三种⽅式可以混合进⾏使⽤, 完全以结果做导向, 只要能拿到你想要的数据. ⽤什么⽅案并不重要.当你掌握了这些之后. 再考虑性能的问题

re解析

Regular Expression, 正则表达式

⼀种使⽤表达式的⽅式对字符串进⾏匹配的语法规则

  • 我们抓取到的⽹⻚源代码本质上就是⼀个超⻓的字符串, 想从⾥⾯提取内容.⽤正则再合适不过了
    在线测试正则表达式

正则表达式相关概念

元字符

  • 具有固定含义的特殊符号

常用元字符
在这里插入图片描述
在这里插入图片描述
量词: 控制前⾯的元字符出现的次数
在这里插入图片描述
贪婪匹配和惰性匹配
在这里插入图片描述

re模块

常用功能

  • findall
    查找所有. 返回list
lst = re.findall("m", "mai le fo len, mai ni
mei!")
print(lst) # ['m', 'm', 'm']
lst = re.findall(r"\d+", "5点之前. 你要给我5000
万")
print(lst) # ['5', '5000']
  • search
    会进⾏匹配. 但是如果匹配到了第⼀个结果. 就会返回这个结果. 如果匹配不上search返回的则是None
ret = re.search(r'\d', '5点之前. 你要给我5000
万').group()
print(ret) # 5
  • match
    只能从字符串的开头进⾏匹配
ret = re.match('a', 'abc').group() 
print(ret) # a
  • finditer
    和findall差不多. 只不过这时返回的是迭代器(重点)
it = re.finditer("m", "mai le fo len, mai ni
mei!")
for el in it:
 print(el.group()) # 依然需要分组
  • compile()
    可以将⼀个⻓⻓的正则进⾏预加载. ⽅便后⾯的使⽤
obj = re.compile(r'\d{3}') # 将正则表达式编译成为
⼀个 正则表达式对象, 规则要匹配的是3个数字
ret = obj.search('abc123eeee') # 正则表达式对象调
⽤search, 参数为待匹配的字符串
print(ret.group()) # 结果: 123
  • 正则中的内容如何单独提取?
    单独获取到正则中的具体内容可以给分组起名字
    将正则表达式括号包裹,加?P<分组名字>
    例子:(?P\d+)
s = """
<div class='⻄游记'><span id='10010'>中国联通
</span></div>
"""
obj = re.compile(r"<span id='(?P<id>\d+)'>(?
P<name>\w+)</span>", re.S)
result = obj.search(s)
print(result.group()) # 结果: <span
id='10010'>中国联通</span>
print(result.group("id")) # 结果: 10010 # 获取
id组的内容
print(result.group("name")) # 结果: 中国联通 #
获取name组的内容

总结

小小励志

有些事你现在不做,一辈子都不会做了。
如果你想做一件事,全世界都会为你让路。
《搭车去柏林》

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

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

相关文章

经纬恒润以太网开发及测试方案,助力智能汽车落地

近年来&#xff0c;为了满足智能网联汽车的开发要求&#xff0c;车载以太网技术开始逐渐进入人们的视野。车载以太网可以满足带宽密集型应用如高级驾驶辅助系统&#xff08;ADAS&#xff09;、车载诊断系统&#xff08;OBD&#xff09;以及车载信息娱乐系统等所需的更高数据传输…

controlsfx框架NotificationPane组件的使用

controlsfx 是javaFx开源UI框架&#xff0c;里面有很多默认组件的补充&#xff0c;最近在使用其中的NotificationPane组件时&#xff0c;遇到一些问题&#xff0c;记录下来。 官方demo链接&#xff1a; https://github.com/controlsfx/controlsfx/blob/jdk-8/controlsfx-samp…

Unittest接口自动化分享

一、环境搭建 1. Python安装 1. 1Python&#xff08;3.6.8版本&#xff09; 下载地址 https://www.python.org/downloads/release/python-368/ 1.1.1 Windows系统 1. 下载1. 对前缀的说明&#xff1a;​ 以Windows x86-64开头的是 64 位的 Python 安装程序&#xff1b;​ …

Ubuntu+Qt下配置车牌识别系统EasyPR1.6环境

1.将EasyPR_v1.6.zip拷贝到虚拟机Ubuntu中 最好是在opt文件夹中 &#xff0c;可使用 VMware tools 共享文件夹 远程连接工具 2.解压得到EasyPR文件夹 修改文件权限 chmod -R 777 EasyPR 3.查找/opt/EasyPR/include/easypr/config.h中 这边告诉我们&#xff0c;如果open…

【RL数学基础】概率论的基本概念:随机变量、概率密度函数、期望、随机抽样

文章目录1.随机变量&#xff08;Random Variable&#xff09;2.概率密度函数&#xff08;Probability Density Function, PDF&#xff09;3.期望&#xff08;Expectation&#xff09;4.随机抽样&#xff08;Random Sampling&#xff09;1.随机变量&#xff08;Random Variable&…

新一代免费开源大型企业数智制造解决方案

国家加速推进信创产业的开源自主可控 信创产业&#xff0c;即信息技术应用创新产业&#xff0c;其包含了从信息化基础设施到底层系统&#xff0c;再到上层的应用软件&#xff0c;与信息化建设过程中涉及有关的全产业链都必须安全与可控。信创产业涉及到的领域包括信息化基础设施…

编译安装nmon

nmon 是什么&#xff1f; nmon&#xff08;Nigel’s performance Monitor for Linux&#xff09;是一种Linux性能监视工具&#xff0c;当前它支持 Power/x86/x86_64/Mainframe/ARM 这五种 CPU 架构的 Linux&#xff0c;能将监控到的数据保存为 JSON 格式便于其他工具进行分析和…

【探索Spring底层】13.深入DispatcherServlet

文章目录1. DispatcherServlet概述2. DispatcherServlet的初始化时机3. DispatcherServlet初始化执行的操作4. RequestMappingHandlerMapping 基本用途5. RequestMappingHandlerAdapter 基本用途6. 参数和返回值解析器1. DispatcherServlet概述 DispatcherServlet是SpringMVC的…

AMS启动流程——APP启动过程

AMS流程图 基本慨念 1.zygote zygote意为“受精卵“。Android是基于Linux系统的&#xff0c;而在Linux中&#xff0c;所有的进程都是由init进程直接或者是间接fork出来的&#xff0c;zygote进程也不例外。 在Android系统里面&#xff0c;zygote是一个进程的名字。Android是基…

Effective C++(三):资源管理

个人读书记录&#xff0c;不适用教学内容。 目录 条款13&#xff1a;以对象管理资源 条款14&#xff1a;在资源管理类中小心copying行为 条款15&#xff1a;在资源管理类中提供对原始资源的访问 条款16&#xff1a;成对使用new和delete时要采取相同形式 条款17&#xff1a…

cubeIDE开发, STM32实时时钟(RTC)写入及读取日历时间开发要点

一、RTC简介 实时时钟的缩写是RTC(Real_Time Clock)&#xff0c;核心是晶振&#xff0c;晶振频率一般为32768 Hz 。它为分频计数器提供精确的与低功耗的实基信号。它可以用于产生秒、分、时、日等信息。为了确保时钟长期的准确性&#xff0c;晶振必须正常工作&#xff0c;不能够…

中小企业的公司财务管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 本课题研究对象是中小企业财务管理系统&#xff0c;设计采用自己开发实践和所学知 识&#xff0c;系统部分主要分为以下…

【圣诞树代码】送她六棵圣诞树,祝她圣诞快乐~(送女朋友必备!)

“ 六棵圣诞树&#xff0c;满足她圣诞愿望 ” 距离25号圣诞节只有几天了&#xff0c;程序员有属于程序员的浪漫&#xff0c;这不来了~ 如果一颗圣诞树不够&#xff0c;那就送她六棵&#xff0c;祝她圣诞快乐~ 直接上效果图—— 01 02 03 04 05 06 代码如下&#xff1a; 第…

[1184]FinalShell下载安装

文章目录FinalShell介绍初步使用更换背景图连接记录删除FinalShell介绍 官网&#xff1a;http://www.hostbuf.com/ http://www.hostbuf.com/?install_fs FinalShell 简介&#xff1a; FinalShell 相当于 xshell ftp 的组合&#xff0c;即&#xff1a;FinalShell xshell f…

【计算机考研408】中断处理流程

中断请求 中断源是请求CPU中断的设备或事件&#xff0c;一台计算机允许有多个中断源。每个中断源向CPU发出中断请求的时间是随机的。 中断响应判优 中断响应优先级是指CPU响应中断请求的先后顺序。当多个中断源同时提出请求时&#xff0c;需通过中断判优逻辑来确定响应哪个中…

Python asyncore socket客户端开发基本使用

目录 介绍 1.定义类并且继承 asyncore.dispatcher 2.实现类中的回调代码 调用父类方法 创建 socket 对象 连接服务器 3.创建对象并且执行 asyncore.loop 进入运行循环 服务端示例代码 运行结果 注意&#xff1a; 介绍 asyncore库是python的一个标准库&#xff0c;提…

作为程序员,你离拿offer就差这个免费且好用的简历制作工具

为什么你的简历总是石沉大海&#xff1f;为什么你投递的岗位迟迟得不到回应&#xff1f;除了岗位招满、HR没看到以及竞争太激烈等客观因素外&#xff0c;最重要的是——“简历”出现了问题。 “简历”就像名片一样&#xff0c;在面试和求职的过程中&#xff0c;一份优质的简历…

数字孪生城市项目的关键技术展望

智慧城市是社会空间、物理空间和信息系统三元有机融合的条件下城市智慧化转型的新型态, 运用以数字孪生为代表的新一代信息化技术优化城市系统, 提升城市品质和综合竞争力, 从而实现可持续发展成为智慧城市构建的新趋势。 数字孪生城市项目的关键技术 北京智汇云舟科技有限公司…

chrome的几种存储storage模式

Storage生命周期存放数据大小与服务器通信localStore 除非被清除&#xff0c;否则永远保存 一般5MB 仅在客户端(即浏览器)中SessionStorage仅在当前会话下有效&#xff0c;关闭页面或者浏览器后被清除 一般5MB 保存&#xff0c;不参与和服务器的通信Cookies一般由服务器生成&a…

荣盛生物将再次上会:前三季度收入约2亿元,曾被暂缓审议

近日&#xff0c;上海证券交易所披露的信息显示&#xff0c;上海荣盛生物药业股份有限公司&#xff08;下称“荣盛生物”&#xff09;将于2022年12月26日接受科创板上市委员会的现场审议&#xff08;即“上会”&#xff09;。据贝多财经了解&#xff0c;荣盛生物曾于11月7月7日…