爬虫入门教程(一)

news/2024/7/7 19:32:36

爬虫入门教程

1.什么是爬虫

爬虫是一种自动获取网站数据的程序或脚本。它可以自动模拟人类访问网站,获取网页源代码,解析并提取出所需的数据

爬虫的工作原理类似于搜索引擎的索引程序,它们会按照预定的规则和算法在互联网上不断地爬取网页,收集信息并建立索引,以便用户可以通过搜索引擎来查找并获取所需的信息。

爬虫通常会从一个起始网址开始,然后根据超链接逐步地遍历整个网站或整个互联网。它们会访问网页的内容,抓取文本、图片、视频等数据,并对这些数据进行处理和分析。爬虫可以用于各种目的,如搜索引擎优化、数据挖掘、信息收集、监控等。

2.爬虫基础知识

在学习爬虫前,需要掌握以下基础知识:

2.1URL

URL是统一资源定位符(Uniform Resource Locator)的缩写,它是互联网上用于标识和定位资源(如网页、图片、视频等)的地址。URL通常由几个部分组成,包括协议、主机名、路径和可选的查询参数和片段标识符。

一个典型的URL的格式如下:

协议://主机名/路径?查询参数#片段标识符

(1)协议(Protocol):指定了访问资源所需的协议,常见的协议有HTTP、HTTPS、FTP、SMTP等。
(2)主机名(Host):标识了资源所在的主机或服务器的域名或IP地址。
(3)路径(Path):指定了服务器上资源的具体位置,用来定位资源在服务器上的存储位置。
(4)查询参数(Query Parameters):可选部分,用来传递额外的参数给服务器,通常以键值对的形式存在,多个参数之间用&符号分隔。
(5)片段标识符(Fragment Identifier):可选部分,用来指定资源中的特定部分,例如网页内的锚点。

举例来说,下面是一个典型的URL:

https://www.example.com/blog/article?id=123#section2

协议: HTTPS
主机名: www.example.com
路径是:/blog/article
查询参数: id=123
片段标识符:section2

通过URL,用户可以方便地访问互联网上的各种资源,浏览网页、下载文件、观看视频等。网络爬虫也是通过解析URL来访问网页并提取数据的。

2.2HTTP协议

HTTP(HyperText Transfer Protocol)是一种用于传输超文本数据(如 HTML)的应用层协议,是万维网的数据通信基础。HTTP是无状态的协议,即每个请求都是独立的,服务器不会维护关于客户端的状态信息。
HTTP通信过程:
在这里插入图片描述
HTTP请求由以下几部分组成:

(1)请求行:包括请求方法(GET、POST等)、请求的URL和协议版本。
(2)请求头部:包含关于请求的附加信息,如Accept、User-Agent等。
(3)请求主体:可选部分,在POST请求中包含提交的数据。

HTTP响应由以下几部分组成:

(1)状态行:包括协议版本、状态码和状态消息。
(2)响应头部:包含响应的附加信息,如Content-Type、Content-Length等。
(3)响应主体和空行:包含实际返回的数据。

2.3HTML/XML

大多数网站使用HTML作为展示内容的标记语言。解析HTML可以提取出页面文本、链接和其他有用信息。XML也是一种常见的结构化数据表示形式。

(1)标签和元素:了解HTML和XML的标签结构以及如何定义元素。
(2)属性:了解标签中的属性以及如何提取和利用这些属性。
(3)文本和注释:理解如何处理文本内容和注释。
(4)嵌套结构:了解标签如何嵌套以构建文档结构。

2.4其他

其他相关知识,比如正则表达式、Json格式处理、JS渲染页面解析、数据库存储等。同时不同国家和地区对互联网数据收集有不同的法律法规。编写爬虫时必须遵守相关法律,避免侵犯他人权益。

3.爬虫流程

一般爬虫开发包含以下步骤:

  1. 确定需求和目标
  2. 分析目标网站结构
  3. 编写爬虫代码
  4. 测试和运行爬虫
  5. 存储和后处理数据
  6. 部署上线和维护

3.1确定需求和目标

明确需要采集哪些网站的哪些数据,以及数据将用于什么目的。这一步决定了爬虫的开发重点和复杂程度。例如爬取网址https://qq.yh31.com/zjbq/的图片
在这里插入图片描述

3.2分析目标网站结构

分析待采集网站的URL路径设计、链接结构、反爬虫策略等,为编写高效稳定的爬虫代码做准备。可用开发者工具等方式辅助分析。

3.3编写爬虫代码

根据需求和分析结果,选择Python、Java等编程语言,结合第三方网络库如Requests等,编写完成各模块的爬虫代码,包括:

  • 链接提取
  • 网页下载
  • 内容解析
  • 数据存储
  • 调度控制

示例代码:

import re
import requests
import os

# 网站URL
url = "https://qq.yh31.com/zjbq/"

# 发送请求获取网页HTML代码
response = requests.get(url)
html_content = response.content.decode("utf-8")

# 使用正则表达式匹配所有JPG图片链接
pattern = r'<img\s+src="(http[s]?://[^"]+\.jpg)"'
image_urls = re.findall(pattern, html_content)

# 创建文件夹用于存储下载的图片
folder_name = "downloaded_images"
if not os.path.exists(folder_name):
    os.makedirs(folder_name)

# 下载图片并保存到本地
for i, image_url in enumerate(image_urls, start=1):
    try:
        response = requests.get(image_url)
        image_data = response.content

        # 构造图片文件名
        image_name = f"{folder_name}/image_{i}.jpg"

        # 保存图片到本地
        with open(image_name, "wb") as file:
            file.write(image_data)
        print(f"Downloaded {image_url} as {image_name}")
    except Exception as e:
        print(f"Error downloading {image_url}: {e}")

print("Download completed.")

3.4测试和运行爬虫

编写完爬虫代码后,先在测试环境中运行检查是否正常工作。如果运行正常无误,可以部署在更大规模的环境下长期运行采集数据。在这里插入图片描述
在这里插入图片描述

3.5存储和后处理数据

采集的数据需要存储并进行必要的后处理,以满足不同的使用需求。可存储为文本文件、数据库等多种格式。后处理包括数据清洗、格式化等步骤。

3.6部署上线和维护

对于长期自动运行的大规模爬虫系统,需要做好容灾、负载均衡、代理IP池等工作,保证稳定高效运行。同时监控和分析日志,持续改进和优化爬虫,维护其健壮性和可扩展性。

4.爬虫库和框架

为了方便快速构建爬虫程序,开发者贡献了诸多优秀的第三方库和框架,大大提高了爬虫开发效率。

常见的Python爬虫库和框架包括:

  • Requests: 功能强大的网络请求库
  • Scrapy: 由Scrapy团队维护的爬虫框架
  • PySpider: 支持分布式的爬虫框架
  • Selenium: 自动控制浏览器的工具
  • PyQuery: 方便解析HTML的库

5.反爬虫策略

网站为了防止被恶意爬虫扫描,采取了各种反爬虫策略,主要包括:

  • 用户识别
  • 限制访问频率
  • IP黑名单和白名单
    -验证码机制
  • Javascript指纹检测
  • 蜜罐链接陷阱

爬虫开发者需要针对不同策略制定相应的应对措施,如设置随机User Agent、使用代理IP池、极验验证码破解等,让爬虫更加人性化,避免被服务器拦截或封杀。

总结

这是一个大致的爬取教程,后续的文章将为大家详细讲解爬虫的知识以及具体的操作。在这里插入图片描述


http://lihuaxi.xjx100.cn/news/2157982.html

相关文章

【JVM】JVM 虚拟机重点解析

JVM 虚拟机重点解析 1. JVM 组成 1.1 JVM 由那些部分组成&#xff0c;运行流程是什么&#xff1f; JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&#xff0c;到处运行 自动内存管理…

从ChatGPT到多模态大模型:现状与未来(多模态)

ChatGPT 训练的核心技术主要包括: 预训练语言模型;有监督微调;基于人类反馈的 强 化 学 习 (ReinforcementLearningfrom Human Feedback,RLHF) 首先,通过自监督预训练使语言模型从大规模语料库中学习语言规律,具备基础 理解和生成能力;然后,通过构造指令微调数据集 并对模型进…

Go导入私有仓库

使用go.mod依赖第三方库时&#xff0c;有以下要求&#xff1a; 代码仓库托管于VCS(版本控制系统)&#xff1b;代码仓库是公开的&#xff1b;仓库地址使用域名访问&#xff1b;仓库域名支持HTTPS访问。 对于自己或者公司内部搭建的私有git&#xff0c;这些条件是比较难同时满足…

数学基础:矩阵

来自: https://www.shuxuele.com/algebra/matrix-determinant.html 一、矩阵的行列式 二、矩阵简单知识 三、矩阵乘法 四、单位矩阵 五、逆矩阵一&#xff1a;简单2阶矩阵求法 六、逆矩阵二&#xff1a;3、4阶逆矩阵求法 6.1 求余子式矩阵 6.2 求代数余子式矩阵 6.3 求伴随矩阵…

log4j2远程代码执行漏洞原理与漏洞复现(基于vulhub,保姆级的详细教程

读者只要保证你的站点目录里有Exploit.class就行&#xff0c;至于我目录里有啥其他的读者不用在意。接下来&#xff0c;我们在攻击机启动LDAP服务。这里使用工具marshalsec-0.0.3-SNAPSHOT-all.jar来快速开启&#xff0c;这个工具在我的上一篇博客中有提到&#xff0c;详情见 …

【iOS ARKit】AR Quick Look 概述

为更好地传播共享 AR 体验&#xff0c;苹果公司引入了 AR Quick Look&#xff0c;并在iOS 12及以上版本系统中深度集成了 AR Quick Look&#xff0c;因此可以通过iMessage、Mail、Notes、 News、 Safari 和 Files 直接体验 AR&#xff0c;AR Quick Look提供了在 iPhone 和iPad …

Vue 3.0单文件组件实现手机号和身份证号加密显示功能

随着Web应用程序的发展&#xff0c;我们经常需要处理用户敏感信息&#xff0c;如手机号码和身份证号码。为了保护用户隐私&#xff0c;我们需要在前端对这些信息进行加密处理&#xff0c;以避免直接暴露在页面上。在这篇博客中&#xff0c;我们将介绍如何使用Vue 3.0单文件组件…

Idea运行单元测试 Test framework quit unexpectedly

Idea运行单元测试 Test framework quit unexpectedly idea运行单元测试时报错如图 解决办法 打开setting&#xff0c;找到Maven下的Running Tests&#xff0c;去掉argLine勾选&#xff0c;