爬虫基础1

一、爬虫的基本概念

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)

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

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

相关文章

集合框框框地架

这一次来介绍一下常用的集合&#xff1a; 首先是两种集合的《家庭系谱图》&#xff1a; 接下来介绍一下集合的种类&#xff1a; Collection Set SetTreeSet&#xff1a;基于红⿊树实现&#xff0c;⽀持有序性操作&#xff0c;例如&#xff1a;根据⼀个范围查找元素的操作。但…

LAMDA面试准备(2024-05-23)

有没有学习过机器学习&#xff0c;提问了 FP-Growth 相比 Apriori 的优点 1. 更高的效率和更少的计算量&#xff08;时间&#xff09; FP-Growth 通过构建和遍历 FP-树 (Frequent Pattern Tree) 来挖掘频繁项集&#xff0c;而不需要像 Apriori 那样生成和测试大量的候选项集。具…

这种电脑原来这么耗电……震惊了粉丝小姐姐

前言 在今年1月份的时候&#xff0c;一位来自重庆的小姐姐加了小白&#xff0c;咨询电脑的问题&#xff1a; 哦豁&#xff0c;这个电脑看着确实闪闪发光&#xff0c;是真的很漂亮&#xff5e;&#xff08;嗯&#xff0c;小姐姐也很漂亮&#xff09; 电脑无法开机&#xff0c;按…

Vue从入门到实战Day12

一、Pinia快速入门 1. 什么是Pinia Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 1. 提供更加简单的API&#xff08;去掉了mutation&#xff09; 2. 提供符合组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 3. 去掉了modules的概念&#xff0c;每一…

LiveGBS流媒体平台GB/T28181用户手册-用户管理:添加用户、编辑、关联通道、搜索、重置密码

LiveGBS流媒体平台GB/T28181用户手册-用户管理:添加用户、编辑、关联通道、搜索、重置密码 1、用户管理1.1、添加用户1.2、编辑用户1.3、关联通道1.4、重置密码1.5、搜索1.6、删除 2、搭建GB28181视频直播平台 1、用户管理 1.1、添加用户 添加用户&#xff0c;可以配置登陆用户…

自动驾驶---Tesla的自动驾驶技术进化史(PerceptionPlanning)

1 前言 笔者在专栏《自动驾驶Planning模块》中已经详细讲解了传统自动驾驶Planning模块的内容&#xff1a;包括行车的Behavior Planning和Motion Planning&#xff0c;以及低速记忆泊车的Planning&#xff08;最开始有15篇&#xff0c;目前逐渐更新到17篇&#xff09;。读者对整…

linux:信号深入理解

文章目录 1.信号的概念1.1基本概念1.2信号的处理基本概念1.3信号的发送与保存基本概念 2.信号的产生2.1信号产生的五种方式2.2信号遗留问题(core,temp等) 3.信号的保存3.1 信号阻塞3.2 信号特有类型 sigset_t3.3 信号集操作函数3.4 信号集操作函数的使用 4.信号的处理4.1 信号的…

SSRF攻击技术

1、SSRF形成原因 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下&#xff0c;SSRF是要目标网站的内部系统。&#xff08;因为他是从内部系统访问的&#xff0c;所有可以通过它攻击外网无法访问的内部系…

人类交互2 听觉处理和语言中枢

人类听觉概述 人类听觉是指通过耳朵接收声音并将其转化为神经信号&#xff0c;从而使我们能够感知和理解声音信息的能力。听觉是人类五种感觉之一&#xff0c;对我们的日常生活和交流至关重要。 听觉是人类交流和沟通的重要工具。通过听觉&#xff0c;我们能够听到他人的语言…

inventor 2021 Inventor 无法访问您的许可。网络许可不可用 也会出现在其他软件上

错误提示一般如下图 Inventor 无法访问您的许可。 无法访问您的许可 最常见的原因有: 未连接到 Internet许可服务器不工作许可服务器找不到有效许可 您可以执行以下操作: 检查是否连接到 Intemnet停止/重新启动许可服务器 如需进一步帮助&#xff0c;您可以: -与 CAD或IT管理…

2:硬件产品经理面试

流程&#xff1a; 市场评估&#xff1a; 组织立项&#xff1a;项目的交付时问&#xff0c;项目资金预算&#xff0c;项目组成员的确定及责任划分&#xff0c;开发和测试。 名种设计&#xff1a;外观材质的工业设计&#xff0c;硬件的架构设计&#xff0c;软件的功能设计&#x…

Go源码--sync库(1)sync.Once和

简介 这篇主要介绍 sync.Once、sync.WaitGroup和sync.Mutex sync.Once once 顾名思义 只执行一次 废话不说 我们看源码 英文介绍直接略过了 感兴趣的建议读一读 获益匪浅 其结构体如下 Once 是一个严格只执行一次的object type Once struct {// 建议看下源码的注解&#xf…

(Askchat.ai、360智脑、鱼聪明、天工AI、DeepSeek)

目录 1、Askchat.ai - 梦想为蓝图&#xff0c;ChatGPT为笔。 2、360智脑 — 以人为本&#xff0c;安全可信 3、鱼聪明AI - 做您强大的AI助手 (yucongming.com) 4、天工AI-搜索、对话、写作、文档分析、画画、做PPT的全能AI助手 (tiangong.cn) 5、DeepSeek | 深度求索 1、Askch…

字符函数:分类函数与转换函数

字符函数 一.字符分类函数二.字符转换函数 在编程的过程中&#xff0c;我们经常要处理字符和字符串&#xff0c;为了方便操作字符和字符串&#xff0c;C语⾔标准库中提供了一系列库函数&#xff0c;接下来我们就学习⼀下这些函数。 一.字符分类函数 C语言中有⼀系列的函数是专门…

allegro 无法删除Xnet

allegro 无法删除Xnet Orcad中打开Constraint Manager之后&#xff0c;再生成网表&#xff0c;导入PCB后就会出现一堆Xnet网络。无法去除Xnet。 解决办法 在原理图ORCAD中&#xff0c; 1、打开Edit Object properties 2、选择Filter by:Capture 3、点击New Property 4、设置…

头歌openGauss-存储过程第2关:修改存储过程

任务描述 本关任务&#xff1a; 修改存储过程pro0101&#xff0c;并调用&#xff1b; --修改sel_course表中成绩<60的记录为成绩10&#xff0c;然后将计算机学院所有学生的选课成绩输出&#xff1b; --a、需要先删除存储过程pro0101&#xff1b; drop procedure if exists p…

第七节 ConfigurationClassParser 源码分析

tips&#xff1a; ConfigurationClassParser 是 Springframework 中的重要类。 本章主要是源码理解&#xff0c;有难度和深度&#xff0c;也枯燥乏味&#xff0c;可以根据实际情况选择阅读。 位置&#xff1a;org.springframework.context.annotation.ConfigurationClassPars…

景源畅信:小白做抖音运营难吗?

在数字化时代&#xff0c;社交媒体已成为人们生活的一部分&#xff0c;而抖音作为其中的翘楚&#xff0c;吸引了众多希望通过平台实现自我价值和商业目标的用户。对于刚入门的小白来说&#xff0c;运营抖音账号可能会遇到不少挑战。接下来&#xff0c;我们将详细探讨这一话题&a…

由于找不到mfc140u.dll怎么办,介绍5种靠谱有效的解决方法

当您的电脑显示“mfc140u.dll丢失”的错误时&#xff0c;通常是因为系统中缺少了某个必要的动态链接库文件。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给用户带来困扰。下面我将详细介绍解决该问题的五种方法。 一&#xff0c;关于mfc140u.dll文件的概述 mfc14…

数据防泄漏系统哪个好用,给文件加密的软件

数据防泄露&#xff08;Data Leakage Prevention&#xff0c;DLP&#xff09;是指通过一定的技术手段&#xff0c;防止组织指定&#xff08;重要或敏感的&#xff09;数据或信息资产以违反安全策略规定的形式流出组织的一种策略。 信息防泄露以文档加密技术为核心&#xff0c;…