爬虫(一) -- 带你了解爬虫最基本概念,一文即可实践

这篇具有很好参考价值的文章主要介绍了爬虫(一) -- 带你了解爬虫最基本概念,一文即可实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、 网络爬虫的概述

1.1 数据的提取与获取

定义:网络爬虫,是一种按照一定规则自动爬取互联网信息的程序和脚本。用于模拟人操作浏览器打开网页,获取网页中的指定数据。

1.2 爬虫种类

爬虫的种类 作用
通用爬虫 爬取网页页面全部的源码数据
聚焦爬虫 爬取网页页面中的局部数据
增量式爬虫 用来检测网站数据的更新情况,一遍爬取到网站最新更新的数据
分布式爬虫 多人爬取,提高网站数据的爬取数据

第一个:根据爬取的数量不同进行分类:
 ①通用爬虫:通常指搜索引擎的爬虫。
   通用爬虫是搜索引擎抓取系统 (baidu,goole,yahoo等)的重要组成部分 。主要目的是将互联网的网页下载到本地 ,形成一个互联网内容的镜像备份。(但是有一个很大的问题就是它们具有很大的局限性:大部分内容没有用——不同的搜索目的,返回的内容相同!)

②聚焦爬虫:针对特定网站的爬虫。
   是面向特定主题需求的一种网络爬虫程序 ,它与通用搜索引擎爬虫的区别在于 :
聚焦爬虫在实施页面抓取时会对内容进行处理筛选,尽量保证只抓取与需求相关的网页信息!

二、 重点学习对目标网站的分析(后面都是固定流程)

2.1 前言

多页面爬取:目标网站的分析【利用开发者工具】 - > 发起请求【检查–网络Network – 标头Agent,找到相对应的URL】 -> 获取响应 – > 继续发起请求 – > 获得响应,进行解析 -> 保存数据。

2.2 什么是Cookie

我们在浏览器中,经常涉及到数据的交换,比如你登录邮箱,登录一个页面。我们经常会在此时设置30天内记住我,或者自动登录选项。那么它们是怎么记录信息的呢,答案就是cookie,Cookie是由HTTP服务器设置的,保存在浏览器中,但HTTP协议是一种无状态协议,在数据交换完毕后,服务器端和客户端的链接就会关闭,每次交换数据都需要建立新的链接。

Cookie是一种存储在用户计算机或移动设备中的小文本文件,用于跟踪用户在网站上的活动和状态。当您访问一个网站时,该网站会向您的计算机发送一个Cookie。

Cookie包含有关您的访问信息,如您的浏览器类型,操作系统,语言偏好和其他访问信息。

Cookie可以用于记录您的登录状态,以便您在下一次访问网站时不必再次输入用户名和密码。它们也可以用于跟踪您的浏览历史记录,以便网站可以提供更加个性化的内容和广告。但是,Cookie也可能被用于跟踪您的隐私信息和活动,这可能会引起隐私和安全方面的问题。因此,大多数浏览器都提供了选项来允许您控制Cookie的使用和删除Cookie。

F12打开浏览器开发者工具,然后按如图步骤即为Cookies

爬虫,爬虫,python,爬虫,搜索引擎,python

2.3 什么是Request Heders

Request headers(请求头)是在客户端向服务器发出HTTP请求时,包含在请求中的元数据。这些元数据包含有关请求的信息,如请求的类型(GET,POST等)、请求的来源、请求的内容类型、请求的时间戳等

Request headers通常包含在HTTP请求的头部,以键值对的形式表示。例如,User-Agent表示浏览器的类型和版本,Accept表示客户端支持的MIME类型,Referer表示请求来源页面的URL地址等。

Request headers是HTTP协议中非常重要的一部分,它们提供了关于请求的附加信息,从而帮助服务器理解请求的目的和内容,并做出相应的响应。同时,request headers也可以用于控制缓存、认证和安全等方面的操作。

2.4 什么是User-Agent

User-Agent是一个HTTP请求头的字段,它包含了发送请求的客户端(通常是浏览器)的相关信息,例如浏览器类型、版本号、操作系统、设备类型等等。

Web服务器可以使用User-Agent头来确定客户端使用的软件和硬件环境,从而提供更适合的响应。例如,网站可能会根据User-Agent头来确定如何渲染页面、提供适当的内容或响应不同类型的设备。

注意:User-Agent头信息可以通过JavaScript或后端代码获取,因此一些网站可能会使用这些信息来分析访问者的行为、统计浏览器市场份额等信息。所以这也给了我们爬虫的可乘之机。

  用户也可以通过修改User-Agent头来隐藏自己的身份或欺骗服务器,因此User-Agent并不能完全确定访问者的真实身份。

通常我们在练习爬虫代码的时候,就需要使用自己实际访问的User-Agent,到后面可以使用代理。

2.5 什么是Referrer

Referrer是指从哪个页面链接到当前页面的URL地址,通常用于追踪和分析网站的流量来源。当用户点击链接或通过搜索引擎访问网站时,Referrer字段将包含来源页面的URL地址。

Referrer信息通常由Web浏览器发送,它可以告诉Web服务器访问者从哪个页面链接到当前页面

这个信息对于网站管理员来说很有用,因为它可以让他们了解网站的流量来源和用户行为。

然而,由于Referrer信息可以包含一些敏感信息,如搜索关键词或上一个访问页面的URL地址,因此有些浏览器和网络安全软件可能会禁止发送Referrer信息,或者在发送时对其进行过滤或匿名化。

三、HTTP

3.1 为什么要知道HTTP

在学习爬虫的时候,了解HTTP是非常重要的,因为HTTP是Web应用程序使用的基础协议。HTTP(Hypertext Transfer Protocol)是一种用于传输超文本(包括HTML文件、图像、音频、视频、样式表等)的应用层协议。

当使用爬虫抓取网站数据时,爬虫首先需要发送HTTP请求,然后从服务器接收HTTP响应。爬虫使用HTTP来与Web服务器通信,HTTP指示了数据如何传输和呈现。因此,了解HTTP协议的基础知识对于学习爬虫是至关重要的。

3.2 HTTP响应状态码:(这里面就有熟悉的404哦!)

HTTP状态码的第一位数字定义了状态码的类型,通常有以下五种类型:

状态码 解释说明
1xx 信息性状态码,表示请求已被接收,继续处理。
2xx 成功状态码,表示请求已成功被服务器接收、理解、并接受。
3xx 重定向状态码,表示需要客户端进一步操作才能完成请求。
4xx 客户端错误状态码,表示客户端发起的请求存在问题,请求未能被服务器理解或接受。
5xx 服务器错误状态码,表示服务器在处理请求时发生错误。

四、网页数据的获取

4.1 最基本的库:requests库的使用

是一个简洁且简单地处理HTTP请求的第三方库,他最大的优点是从程序编写过程更接近正常的URL访问过程。

官方教学文档如下:
https://requests.readthedocs.io/projects/cn/zh_CN/latest/

第三方库的下载: 打开python下的cmdpip install + 第三方库名
第三方库的导入: importrequests
构造返回 Request对象

r = requests.get(url)

Response对象包含服务器返回的所有信息,也包含请求的Request信息。
属性如下:

属性 说明
r.status_code HTTP请求返回的状态,200表示成功,404表示失败
r.text HTTP响应的字符串形式,url对应的页面内容
r.content HTTP响应内容的二进制形式(图片、视频、音频)

注意:

  • 如果图片文件存入了js里面,解码需要导入json库,利用json.loads()进行解码,构成所需数据框,不然源代码是一串字符串,无法进行之后的操作
  • 编码所用函数:导入from urllib import parse,使用parse.quote()进行编码

4.2 获取头部信息

  1. 获取cookies
import requests
from fake_useragent import UserAgent
r = requests.get(url,headers = headers)

# 方法一,items打印出列表形式,遍历后依次打印
for key,value in r.cookies.items():
    print(key + "=" + value)

# 方法二,转换为字典形式
cookie = requests.utils.dict_from_cookiejar(r.cookies)
print(cookie)
  1. 获取headers,可以使用r.headers

  2. 获取发送请求后响应的url,可以使用r.url

4.3 .get参数详细解释

requests.get()requests.post() 是 Python 中的两个常用的 HTTP 请求库,可以用于发送 GET 和 POST 请求。这两个函数都可以接受多个参数,下面是对它们常用参数的详细解释:

对于 requests.get(url, params=None, **kwargs) 函数:

  • url: 请求的 URL 地址。
  • params: 可选的字典或字节序列,用于传递请求参数。
  • **kwargs: 可选的关键字参数,包括:
    • headers: 字典类型,HTTP 请求头部信息。
    • timeout: 设置超时时间。
    • proxies: 字典类型,代理服务器地址。

1、设置cookie,上述已经讲过获取的方法。
2、设置代理proxies

提示:知不知道服务器的地址做为判断标准:知道就是正向代理,不知道就是反向代理。

我们为什么要使用代理?
(1)让服务器以为不是同一个客户端在请求;
(2)防止我们的真实地址被泄露,防止被追究。

用法:
  当我们需要使用代理时,同样构造代理字典,传递给proxies参数。
  
3、禁止证书验证vertify
  有时候我们使用了抓包工具,这个时候由于抓包工具提供的证书并不是由受信任的数字证书颁发机构颁发的,证书的验证就会失败,这时我们就需要关闭证书验证false。
(3)设置timeout
  实际上,我们在多数爬虫开发中——超时参数timeout是和retrying模块(刷新)一起使用的!

代码转载自一位大神:点此跳转

import requests
from retrying import retry

headers = {"User-Agent":"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.2 (KHTML, like Gecko) Chrome/4.0.222.3 "}

@retry(stop_max_attempt_number=3)   # stop_max_attempt_number=3最大执行3次,还不成功就报错
def _parse_url(url):                # 前面加_代表此函数,其他地方不可调用
    print("*"*100)
    response = requests.get(url, headers=headers, timeout=3)    # timeout=3超时参数,3s内
    assert response.status_code == 200                          # assert断言,此处断言状态码是200,不是则报错
    return response.content.decode()


def parse_url(url):
    try:
        html_str = _parse_url(url)
    except Exception as e:
        print(e)
        html_str = None
    return html_str

if __name__ == '__main__':
    # url = "www.baidu.com"         # 这样是会报错的!
    url = "http://www.baidu.com"
    print(parse_url(url))

4.4 .post参数详细解释

对于 requests.post(url, data=None, json=None, **kwargs) 函数:

  • url: 请求的 URL 地址。
  • data: 字典、元组列表或字节序列,用于向服务器发送表单数据。
  • json: JSON 格式的数据,用于发送 JSON 数据。
  • **kwargs: 可选的关键字参数,包括:
    • headers: 字典类型,HTTP 请求头部信息。
    • timeout: 设置超时时间。
    • proxies: 字典类型,代理服务器地址。

Content-Type在HTTP的请求正文里面,和POST提交数据方式的关系如下图:

Content-Type 提交数据的方式
application/x-www-form-urlencoded 表单数据
multipart/form-data 表单文件上传
application/json 序列化JSON数据
text/xml XML数据

在爬取代码的时候,一定要找对HTTP的请求,构建正确POST请求,否则无法返回相应的内容。

更详细的信息和更多参数可以在官方文档中查看:

  • requests.get(): https://docs.python-requests.org/en/latest/api/#requests.get
  • requests.post(): https://docs.python-requests.org/en/latest/api/#requests.post

4.5 data和params的不同

在 Python 的 requests 库中,dataparams 都是用于向服务器发送请求的参数,但它们的作用和使用场景略有不同。

params 通常用于发送 GET 请求时,用于传递查询字符串参数。查询字符串是在 URL 中出现的键值对,它们被包含在 URL 的问号(?)后面,多个键值对之间使用 & 符号分隔。例如,假设我们要发送一个 GET 请求到 https://example.com/search,查询字符串中包含 q page 两个参数,可以这样写:

import requests

params = {'q': 'python', 'page': '2'}
response = requests.get('https://example.com/search', params=params)

发送请求后,requests 库将自动将 params 中的参数编码到 URL 的查询字符串中,得到的完整 URL 是 https://example.com/search?q=python&page=2。

data 则通常用于发送 POST 请求时,用于传递表单数据、JSON 数据等请求体参数。它们以字典的形式传递给 data 参数,然后 requests 库会将其编码为适当的格式发送给服务器。例如,假设我们要发送一个 POST 请求到 https://example.com/login,包含用户名和密码两个表单字段,可以这样写:

import requests

data = {'username': 'alice', 'password': 'secret'}
response = requests.post('https://example.com/login', data=data)

发送请求后,requests 库将自动将 data 中的参数编码为 application/x-www-form-urlencoded 或 multipart/form-data 格式,作为请求体发送给服务器。

需要注意的是,虽然 paramsdata 在作用和使用场景上略有不同,但它们都是可选参数,可以根据实际情况选择使用或不使用。

4.6 获取响应

r.text,获得url返回的内容。

r.josn 如果我们访问之后获得的数据是JSON格式的,那么我们可以使用json()方法,直接获取转换成字典格式的数据。之后,利用json.loads()进行解码。

4.7 小知识

知识点一:
  有时候我们会遇到相同的url参数名,但有不同的值,而python的字典又不支持键的重名,那么我们可以把键的值用列表表示:

import requests
params = {'key': 'value1', 'key2': ['value2', 'value3']}
resp = requests.get("http://httpbin.org/get", params=params)
print(resp.url)

知识点二:

注意:json和data二者只能同时存在其一

五、 数据可视化的技术应用(框架、组件等)【持续更新ing】

补充:爬虫开发重难点(进阶)

爬虫的难点

爬虫难点主要分为两个方向:

  1. 数据的获取
      网络公共资源都是为用户准备的,为了避免被爬虫采集,服务端会设置非常多的图灵测试,阻止爬虫的恶意爬取,也即是反爬措施。我们在开发爬虫的过程中,有很大一部分的工作就是处理这些反爬措施。
  2. 采集的速度
       大数据时代,需要巨大的数据量,动辄千万条的级别,甚至上亿条。如果采集速度跟不上,耗时过长,那么就达不到商业要求。一般我们会采取并发以及分布式来解决速度上的问题。这也是爬虫开发过程中的另外一个重心。

注意:域名可以确定是哪一台电脑;而端口号是为了确定是那台电脑的哪一个应用

正则表达式

re.findall(b"From Inner Cluster \r\n\r\n(.*?)",first_data,re.s) 这串代码是什么意思

解释:
1、该正则表达式的作用是从first_data字符串中找到所有以"From Inner Cluster"开头,后跟两个回车符(\r\n\r\n),然后是任何字符的子字符串,并返回一个列表。
2、re.s 标志被用于 re.findall() 方法的第三个参数中,以表示该正则表达式模式中的 . 可以匹配包括换行符在内的任何字符。文章来源地址https://www.toymoban.com/news/detail-733145.html

到了这里,关于爬虫(一) -- 带你了解爬虫最基本概念,一文即可实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 了解SPI总线CAN控制器 MCP2515配置 一文即可

    最近工作中遇到需要6路CAN通信的情况,单片机自带的4路已不满足实际需求,故采用了SPI总线的CAN控制器芯片MCP2515,通过SPI通信的CAN扩展芯片最高可实现 1Mbps 的遵循 CAN 2.0B 的协议通信,配置起来也比较繁琐,故写诞生了这篇文章。本篇中仅对基础功能进行测试,如有疑问可

    2024年02月06日
    浏览(50)
  • [网络安全]一文带你了解SSTI漏洞(结合Web_python_template_injection解题详析)

    SSTI是Server-Side Template Injection的缩写,是一种Web应用程序安全漏洞,主要存在于使用基于模板引擎的Web应用程序中。 SSTI漏洞的主要原因是 在Web应用程序中使用了基于模板引擎的渲染功能,并且没有正确地验证和过滤用户输入的数据。当攻击者能够构造特定的输入并成功地注入

    2024年02月08日
    浏览(44)
  • Python爬虫数据分析的基本概念

    Python爬虫数据分析是一种利用Python编程语言和相关的库来获取互联网上的数据,并对数据进行处理、分析和可视化的技术。Python爬虫数据分析技术在数据挖掘、商业智能、市场调研、舆情分析等领域都有广泛的应用。本文将介绍Python爬虫数据分析的基本概念、常用库和实战案

    2024年02月06日
    浏览(44)
  • 一文带你了解动态内存管理

    目录 动态内存存在的意义 动态内存函数的介绍 malloc和free calloc realloc 常见的动态内存错误 对NULL指针解引用操作 对动态开辟的空间的越界访问 对非动态开辟内存使用free释放 使用free释放一块动态开辟内存的一部分 对同一块内存多次释放 动态开辟内存忘记释放 经典的笔试题

    2024年02月16日
    浏览(44)
  • 一文带你了解React框架

    前言 由于 React的设计思想极其独特,属于革命性创新,性能出众,代码逻辑却非常简单。所以,越来越多的人开始关注和使用,认为它可能是将来 Web 开发的主流工具。 这个项目本身也越滚越大,从最早的UI引擎变成了一整套前后端通吃的 Web App 解决方案。衍生的 React Nativ

    2024年02月01日
    浏览(48)
  • 一文带你了解MySQL之锁

    上一篇文章主要学习了事务并发执行时可能带来的各种问题,并发事务访问相同记录的情况我们大致可以划分为3种: 读-读 情况:即并发事务相继读取相同的记录,我们需要知道的是读取操作本身不会对记录有一毛钱影响,并不会引起什么问题,所以允许这种情况的发生。

    2024年02月08日
    浏览(50)
  • 【MySQL】一文带你了解数据过滤

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录

    2024年02月09日
    浏览(42)
  • 【MySQL】一文带你了解过滤数据

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录

    2024年02月09日
    浏览(50)
  • 【MySQL】一文带你了解SQL

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ ------------------❤️分割线❤️------------------------- —————————

    2024年02月08日
    浏览(50)
  • 一文带你了解MySQL之约束

    在SQL标准中,一共规定了6种不同的约束, 包括非空约束,唯一约束和检查约束等,而在MySQL中是不支持检查约束的,所以这篇文章先对其余5种约束做一个详解和练习。 约束是作用于表中列上的规则,用于限制加入表的数据。 例如,作为主键的列一定是非空的唯一的,否则将

    2024年02月07日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包