爬虫基础1

news2024/10/6 17:20:42

一、爬虫的基本概念

1.什么是爬虫?

                请求网站并提取数据的自动化程序

2.爬虫的分类

    2.1 通用爬虫(大而全

        功能强大,采集面广,通常用于搜索引擎:百度,360,谷歌

    2.2 聚焦爬虫,主题爬虫(小而精

        功能相对单一(只针对特定的网站的特定内容进行爬取)

    2.3增量式爬虫(只采集更新后的内容)

        爬取更新后的内容,新闻,漫画,视频…(区分新老数据)

3.ROOT协议

        什么是robots协议?

        3.1 Robots协议的全称是"网络爬虫排除标准" (Robots Exclusion Protocol),简称为Robots协议。

        3.2 Robots协议的一个很重要作用就是网站告知爬虫哪些页面可以抓取,哪些不

行。君子协定:指代的是口头上的协议,如果爬取了,可能会出现法律纠纷(商用).

二、爬虫的基本流程

1.发起请求

        通过HTTP库向目标站点发起请求,即发起一个Request,请求可以包含额外的headers信息,等待服务器响应。

2.获取响应内容

        如果服务器能正常响应,会得到一个Response,Response的内容便是索要获取的页面内容,类型可能有HTML,Json字符串,二进制数据(如图片视频)等类型

3.解析内容

        得到的内容可能是HTML,可以用正则表达式、网页解析库进行解析,可能是Json,可以直接转为Json对象解析,可能是二进制数据,可能做保存或进一步处理

4.保存数据

       保存形式多样,可以保存为文本,也可保存至数据库或者保存特定格式的文件

三、Request和Response

        1.浏览器就发送消息给该网址所在的服务器,这个过程叫做HTTP Request。

        2.服务器收到浏览器发送的消息后,能够根据浏览器发送消息的内容,做相应处理,然

后把消息回传给浏览器。这个过程叫做HTTP Response。

        3.浏览器收到服务器的Response信息后,会对信息进行相应处理,然后展示。

        4.Request

        4.1 主要有GET、POST两种类型

        4.2 URL全称统一资源定位符,如一个网页文档、一张图片、一个视频等都可

        以用URL唯一来确定。

        4.3 包含请求时的头部信息,如User-Agent、Host、Cookies等信息。       

        4.4 请求时额外携带的数据如表单提交时的表单数据。

        5.Reponse

        5.1 响应状态

有多种响应状态,如200代表成功、301跳转、404找不到页面、502服务器错误

        5.2 响应头

           如内容类型、内容长度、服务器信息、设置Cookie等等。

        5.3 响应体

           最主要的部分,包含了请求资源的内容, 如网页HTML、图片二进制数据等。

注意:在监测的时候用Ctrl+F调出搜索框

四、Requests模块

       作用:发送网络请求,或得响应数据

开源地址:https://github.com/kennethreitz/requestsicon-default.png?t=N7T8https://github.com/kennethreitz/requests

安装: pip install requests -i https://pypi.douban.com/simple/

       中文文档 API http://docs.python-requests.org/zh_CN/latest/index.htmlicon-default.png?t=N7T8http://docs.python-requests.org/zh_CN/latest/index.html

       官方文档:    Requests: 让 HTTP 服务人类 — Requests 2.18.1 文档icon-default.png?t=N7T8https://requests.readthedocs.io/projects/cn/zh-cn/latest/

1.Requests请求

只能得到一个包的数据

url = 'https://www.baidu.com/'
response = requests.get(url)
print(response)#返回的是一个响应体对象

print(response.text)#获取响应体内容

print(response.status_code)#响应状态码

Get请求

url = 'https://httpbin.org/get'

#url = 'https://httpbin.org/get?age=18&&name=zhangsan'

data = {

    'name':'zhangsan',

    'age':19

}

response = requests.get(url,params=data)#params携带get请求的参数进行传参

print(response.text)
 

Post请求

rl = 'https://httpbin.org/post'

data = {

    'name':'zhangsan',

    'age':19

}

response = requests.post(url,data=data)#data:携带post请求需要的表单数据,在form里面形成

print(response.text)

自己理解:

对于Get来说,主要在网址输入时即输入URL的时候用到,而POST则是在网页里面,比如翻译时的单词输入等

      

获取Json数据

url = 'https://httpbin.org/get'

result = requests.get(url)

result_data = result.json()

print(result_data)

print(type(result_data))

会发现Py里面的Json数据就是字典类型

获取二进制据数据

url = 'https://b.bdstatic.com/searchbox/icms/searchbox/img/ci_boy.png'

result = requests.get(url)

#print(result.text) #二进制数据转文本会显示乱码,str

print(result.content)#会发现是以b开头的bite类型二进制数据,bytes



data = result.content

with open('TuPian.png','wb') as f:  #wb是写入二进制

    f.write(data)

初步伪装小爬虫——添加headers

              浏览器用户身份的标识,缺少的话服务器会认为你不是一个正常的浏览器用户,而是一个爬虫程序

       User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0

import requests

import fake_useragent

ua = fake_useragent.UserAgent()

ua_fake = ua.chrome

url = 'https://www.jianshu.com/'

headers = {

    #'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'

    'User-Agent':ua_fake

}


result = requests.get(url,headers = headers)

print(result.text)

会话维持

       例如爬取简书的收藏的时候,如果不登陆就无法爬取,可以在headers里面增加cookie内容即可,但要注意的是cookie有对应的时间

import requests

import fake_useragent


ua = fake_useragent.UserAgent()

ua_fake = ua.chrome

url = 'https://www.jianshu.com/'


headers = {

    #'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'

    'User-Agent':ua_fake,

    'cookie':''

}


result = requests.get(url,headers = headers)

print(result.text)

代理

import requests

p = {
    'http':'120.41.143.139:21037',
    'https':'120.41.143.139:21037',
}

url = 'https://www.jianshu.com/'

headers = {

    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36 Edg/124.0.0.0'

}

result = requests.get(url,headers = headers,proxies=p)

print(result.text)

       注意的是这里的ip无效,后面继续展开

五、正则表达式

       1.正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特殊字符以及这些特殊字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种逻辑过滤

       2.非Python独有

        3.Python里面是使用re模块来实现的,不需要额外进行安装,是内置模块

常见匹配模式

             

      

re.match()方法的使用

import re



#content = 'Hello 123 456789 World_This is a Regex Demo'



#re.match('正则表达式','目标字符串')

#result = re.match('Hello\s\d\d\d\s\d{6}\s\w{10}',content)

#print(result.group())



#result = re.match('H.*Demo',content)



#result = re.match('Hello\s(\d{3})\s(\d{6})',content)

#print(result.group(1))  #这里0表示最先出现的括号,1表示第二次出现的括号

#print(result.group(1,2))    #这是一个元组,后面处理较麻烦



#content = 'Hello 123456789 World_This is a Regex Demo'

#result = re.match('He.*(\d+).*Demo',content)

#因为贪婪模式的存在,在He之后,Demo之前至少有一个数字字符,即9

#print(result.group(1)) #打印的为9



#加上?后,即为非贪婪

#result = re.match('He.*?(\d+).*Demo',content)

#print(result.group(1))



#content = """Hello 123456789

#World_This

# is a Regex

#  Demo"""

#result = re.match('He.*?(\d+).*Demo',content,re.S)#re.S忽略换行符

#print(result.group())



#\转义符,如果对\转义,则需要两个\\,也可以直接写r,再接一个\

#content = 'price is $9.99'

#result = re.match('price\sis\s\$9.99',content) #$这个在正则表达式有自己的含义

#print(result.group())

search方法

search全文检索,返回满足表达式的第一个

#result = re.search('<a\s\href="/3.mp3"\ssinger="(.*)">(.*)</a>',html)

#print(result.group(1))

Findall方法

用一个大列表返回满足所有的正则表达式结果

#result = re.findall('<a\s\href="(.*)"\ssinger="(.*)">(.*)</a>',html)

#for i in result:

#   print(i)

Re.sub()

#re.sub('要替换的目标的正则表达式','想要将前面匹配到的数据替换成什么','目标字符串')

#sub_html = re.sub('<i.*</i>','',html)

#result = re.findall('<a\s\href="(.*)"\ssinger="(.*)">(.*)</a>',sub_html)

#for i in result:

#   print(i)

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

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

相关文章

人工智能应用-实验4-蚁群算法求解 TSP

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

【GO基础】1. Go语言环境搭建

Go语言环境搭建 Go的三种安装方式Go标准包安装Windows 安装验证是否安装成功 4.Go的第一个程序 Hello World.go Go的三种安装方式 Go有多种安装方式&#xff0c;可以选择自己适合的。这里介绍三种最常见的安装方式&#xff1a; Go源码安装&#xff1a;这是一种标准的软件安装…

【NumPy】NumPy实战入门:统计与聚合(histogram、percentile、corrcoef、cov)详解

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

如何解决vcruntime140.dll丢失问题,详细介绍5种靠谱的解决方法

vcruntime140.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;它为使用Visual C编译器开发的应用程序提供必要的运行时环境。该DLL文件包含了大量应用程序运行时需要调用的库函数&#xff0c;这些函数是实现C标准库、异常处理机制、RTTI&#xff08;运行…

IO端口编址

统一编址 特点 独立编址 特点 内存地址分配 区别 应用 IO端口地址译码 硬件上的实现 示例1&#xff1a; 示例2&#xff1a; IO指令 软件上的实现 示例

golang通过go-aci适配神通数据库

1. go-aci简介 go-aci是神通数据库基于ACI(兼容Oracle的OCI)开发的go语言开发接口&#xff0c;因此运行时需要依赖ACI驱动和ACI库的头文件。支持各种数据类型的读写、支持参数绑定、支持游标范围等操作。 2. Linux部署步骤 2.1. Go安装&#xff1a; 版本&#xff1a;1.9以上…

CleanMyMac X2024垃圾清理神器,让你的Mac保持飞速运行

在数字时代的浪潮中&#xff0c;我们的苹果电脑扮演了至关重要的角色。然而&#xff0c;随着数据的增长和存储需求的不断上升&#xff0c;不合理的文件管理往往会导致系统性能逐渐下降&#xff0c;影响我们的工作效率。为了有效应对这一挑战&#xff0c;许多用户转向使用专为Ma…

抖音运营_抖音电商介绍

截止20年8月&#xff0c;抖音的日活跃数高达6亿。 20年6月&#xff0c;上线抖店 &#xff08;抖音官方电商&#xff09; 一 抖店的定位和特色 1 一站式经营 帮助商家进行 商品交易、店铺管理、客户服务 等全链路的生意经营 2 多渠道拓展 抖音、今日头条、西瓜、抖音火山版…

MyBatisPlus使用流程

引入依赖 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.4</version> </dependency> 版本号根据需要选取 在实体类上加注解声明&#xff0c;表信息 根据数…

7、按钮无法点击

不能点击&#xff0c;打开f12&#xff0c;删除disabled

AIGC绘画设计基础-建筑设计应用

一、AI及AIGC 对于AI大家都不陌生&#xff0c;但是AIGC这个概念好多人其实不大清楚。“AI”是指人工智能技术本身&#xff0c;而“AIGC”是指基于人工智能技术而生成的内容。 生成式人工智能——AIGC&#xff08;Artificial Intelligence Generated Content&#xff09;&…

Pod进阶——资源限制以及探针检查

目录 一、资源限制 1、资源限制定义&#xff1a; 2、资源限制request和limit资源约束 3、Pod和容器的资源请求和限制 4、官方文档示例 5、CPU资源单位 6、内存资源单位 7、资源限制实例 ①编写yaml资源配置清单 ②释放内存&#xff08;node节点&#xff0c;以node01为…

阴影映射(线段树)

实时阴影是电子游戏中最为重要的画面效果之一。在计算机图形学中&#xff0c;通常使用阴影映射方法来实现实时阴影。 游戏开发部正在开发一款 2D 游戏&#xff0c;同时希望能够在 2D 游戏中模仿 3D 游戏的光影效果&#xff0c;请帮帮游戏开发部&#xff01; 给定 x-y 平面上的…

深度学习模型keras第二十一讲:使用BaseImageAugmentationLayer进行自定义图像增强

1、自定义图像增强技术概述 1.1自定义图像增强概念 深度学习的自定义图像增强技术是一种通过自定义的算法和策略对图像进行变换&#xff0c;以增加模型泛化能力和提高训练效果的技术。这些增强技术可以应用于各种深度学习任务&#xff0c;如图像分类、目标检测、图像分割等。…

求第 N 个泰波那契数 | 动态规划

1.第 N 个泰波那契数 题目连接&#xff1a;1137. 第 N 个泰波那契数 泰波那契序列 Tn 定义如下&#xff1a; T0 0, T1 1, T2 1, 且在 n > 0 的条件下 Tn3 Tn Tn1 Tn2给你整数 n&#xff0c;请返回第 n 个泰波那契数 Tn 的值。 2.什么是动态规划 在解决这道问题之前…

张大哥笔记:改变自己,才是改变一切的开始

人往往有一种惰性&#xff0c;总喜欢把希望寄托于别人&#xff01;比如会将注意力投向外部因素如环境、他人或命运从而期望为我们的生活带来突破和转机。但现实往往是残酷的&#xff0c;不会发生任何改变的&#xff01;真正的改变来自于自己&#xff0c;自我革新才是改变整个局…

cocos 通过 electron 打包成 exe 文件,实现通信问题

cocos 通过 electron 打包成 exe 文件&#xff0c;实现通信问题 首先&#xff0c;我使用的 cocos 版本是 2.4.12&#xff0c;遇到一个问题&#xff0c;是啥子呢&#xff0c;就是我要把用 cocos 开发出来的项目打包成一个 exe 可执行程序&#xff0c;使用的是 electron &#xf…

ArkUI-X开发指南:【SDK配置和构建说明】

ArkUI-X SDK配置和构建说明 ArkUI-X SDK是ArkUI-X开源项目的编译产物&#xff0c;可将ArkUI-X SDK集成到现有Android和iOS应用工程中&#xff0c;使开发者基于一套ArkTS主代码&#xff0c;就可以构建支持多平台的精美、高性能应用。SDK内容包含ArkUI跨平台运行时&#xff0c;组…

Java期末复习指南(1):知识点总结+思维导图,考试速成!

&#x1f516;面向对象 &#x1f4d6; Java作为面向对象的编程语言&#xff0c;我们首先必须要了解类和对象的概念&#xff0c;本章的所有内容和知识都是围绕类和对象展开的&#xff01; ▐ 思维导图1 ▐ 类和对象的概念 • 简单来说&#xff0c;类就是对具有相同特征的一类事…

多线程、进程、线程五种状态、synchronized、volatile、Lock、CAS、死锁、ThreadLocal

1、并发编程 并发编程三要素 原子性&#xff1a;只一个操作要么全部成功&#xff0c;要么全部失败可见性&#xff1a;一个线程对共享变量的修改&#xff0c;其他线程能够立刻看到有序性&#xff1a;程序执行的顺序按照代码的先后顺序执行 synchronized&#xff0c;Lock解决原…