【100天精通python】Day41:python网络爬虫开发_爬虫基础入门

目录

 专栏导读 

1网络爬虫概述

1.1 工作原理

1.2 应用场景

1.3 爬虫策略

1.4 爬虫的挑战

2 网络爬虫开发

2.1 通用的网络爬虫基本流程

2.2 网络爬虫的常用技术

2.3 网络爬虫常用的第三方库

3 简单爬虫示例


 专栏导读 

专栏订阅地址:https://blog.csdn.net/qq_35831906/category_12375510.html

1网络爬虫概述

        网络爬虫(Web Crawler),也称为网络蜘蛛、网络机器人,是一种自动化程序,用于在互联网上浏览和抓取信息。爬虫可以遍历网页,收集数据,提取信息,以便于进一步处理和分析。网络爬虫在搜索引擎、数据采集、信息监测等领域发挥着重要作用。

1.1 工作原理

  1. 初始URL选择: 爬虫从一个或多个初始URL开始,这些URL通常是你希望开始爬取的网站的主页或其他页面。

  2. 发送HTTP请求: 对于每个初始URL,爬虫会发送HTTP请求以获取网页内容。请求可以包括GET、POST等不同的HTTP方法,也可以设置请求头、参数和Cookies等。

  3. 接收HTTP响应: 服务器将返回一个HTTP响应,其中包含网页的HTML代码和其他资源,如图片、CSS、JavaScript等。

  4. 解析网页内容: 爬虫使用HTML解析库(如Beautiful Soup或lxml)解析接收到的HTML代码,将其转换为文档对象模型(DOM)结构。

  5. 数据提取和处理: 通过DOM结构,爬虫从网页中提取所需的信息,如标题、正文、链接、图片等。这可以通过CSS选择器、XPath等方法实现。

  6. 存储数据: 爬虫将提取的数据存储到本地文件、数据库或其他存储系统中,以供后续分析和使用。

  7. 发现新链接: 在解析网页时,爬虫会找到新的链接,并将其加入待爬取的URL队列中,以便继续爬取更多页面。

  8. 重复流程: 爬虫循环执行上述步骤,从初始URL队列中取出URL,发送请求,接收响应,解析网页,提取信息,处理和存储数据,发现新链接,直到完成爬取任务。

  9. 控制和维护: 爬虫需要设置适当的请求频率和延时,以避免对服务器造成过大负担。还需要监控爬虫的运行情况,处理错误和异常。

1.2 应用场景

  • 搜索引擎:搜索引擎使用爬虫来抓取网页内容,建立索引,以便用户搜索时能够快速找到相关信息。

  • 数据采集:企业、研究机构等可以使用爬虫从互联网上采集数据,用于市场分析、舆情监测等。

  • 新闻聚合:爬虫可以从各个新闻网站抓取新闻标题、摘要等,用于新闻聚合平台。

  • 价格比较:电商网站可以使用爬虫抓取竞争对手的产品价格和信息,用于价格比较分析。

  • 科研分析:研究人员可以使用爬虫来获取科学文献、学术论文等信息。

1.3 爬虫策略

        通用爬虫(General Crawler)和聚焦爬虫(Focused Crawler)是两种不同的网络爬虫策略,用于在互联网上获取信息。它们的工作方式和应用场景有所不同。

通用爬虫(General Crawler): 通用爬虫是一种广泛用途的爬虫,它的目标是尽可能地遍历互联网上的大量网页,以收集和索引尽可能多的信息。通用爬虫会从一个起始URL开始,然后通过链接跟踪、递归爬取等方式探索更多的网页,构建一个广泛的网页索引。

通用爬虫的特点:

  • 目标是收集尽可能多的信息。
  • 开始于一个或多个起始URL,然后通过链接跟踪扩展。
  • 适用于搜索引擎和大型数据索引项目。
  • 需要考虑网站的robots.txt文件和反爬虫机制。

聚焦爬虫(Focused Crawler): 聚焦爬虫是一种专注于特定领域或主题的爬虫,它选择性地爬取与特定主题相关的网页。与通用爬虫不同,聚焦爬虫只关注某些特定的网页,以满足特定需求,如舆情分析、新闻聚合等。

聚焦爬虫的特点:

  • 专注于特定主题或领域。
  • 根据特定的关键词、内容规则等选择性地爬取网页。
  • 适用于定制化需求,如舆情监控、新闻聚合等。
  • 可以更精准地获取特定领域的信息。

在实际应用中,通用爬虫和聚焦爬虫有各自的优势和用途。通用爬虫适合用于构建全面的搜索引擎索引,以及进行大规模数据分析和挖掘。聚焦爬虫则更适合于定制化需求,能够针对特定领域或主题获取精准的信息。

1.4 爬虫的挑战

  • 网站结构变化:网站结构和内容可能随时变化,需要对爬虫进行调整和更新。

  • 反爬虫机制:一些网站采取了反爬虫措施,如限制请求频率、使用验证码等。

  • 数据清洗:从网页中提取的数据可能包含噪音,需要进行清洗和整理。

  • 法律和道德问题:爬虫需要遵守法律法规,尊重网站规则,不要滥用和侵犯他人权益。

        总结: 网络爬虫是一种自动化程序,用于从互联网上获取信息。它通过发送请求、解析网页、提取信息等步骤,实现数据的采集和整理。在不同的应用场景中,爬虫发挥着重要的作用,但也需要面对各种挑战和合规性问题。

2 网络爬虫开发

2.1 通用的网络爬虫基本流程

2.2 网络爬虫的常用技术

     网络爬虫是一种自动化的程序,用于从互联网上收集数据。常用的网络爬虫技术和第三方库包括以下内容:

1. 请求和响应处理:

  • Requests: 用于发送HTTP请求和处理响应的库,方便爬虫获取网页内容。
  • httpx: 类似于requests,支持同步和异步请求,适用于高性能爬虫。

2. 解析和提取数据:

  • Beautiful Soup: 用于解析HTML和XML文档,并提供简单的方法来提取所需数据。
  • lxml: 高性能的HTML和XML解析库,支持XPath和CSS选择器。
  • PyQuery: 基于jQuery的解析库,支持CSS选择器。

3. 动态渲染网页:

  • Selenium: 自动化浏览器库,用于处理动态渲染的网页,如JavaScript加载内容。

4. 异步处理:

  • asyncio和aiohttp: 用于异步处理请求,提高爬虫的效率。

5. 数据存储:

  • SQLite、MySQL、MongoDB: 数据库用于存储和管理爬取的数据。
  • CSV、JSON: 简单格式用于导出和导入数据。

6. 反爬虫和IP代理:

  • User-Agent设置: 设置请求的User-Agent头部来模拟不同浏览器和操作系统。
  • 代理服务器: 使用代理IP来隐藏真实IP地址,避免IP封禁。
  • 验证码处理: 使用验证码识别技术来处理需要验证码的网站。

7. Robots.txt和网站政策遵守:

  • robots.txt: 检查网站的robots.txt文件,遵循网站的规则。
  • 爬虫延迟: 设置爬虫请求的延迟,避免对服务器造成过大负担。

8. 爬虫框架:

  • Scrapy: 一个强大的爬虫框架,提供了许多功能来组织爬取过程。
  • Splash: 一个JavaScript渲染服务,适用于处理动态网页。

2.3 网络爬虫常用的第三方库

        网络爬虫使用多种技术和第三方库来实现对网页的数据获取、解析和处理。以下是网络爬虫常用的技术和第三方库:

1. 请求库: 网络爬虫的核心是发送HTTP请求和处理响应。以下是一些常用的请求库:

  • Requests: 简单易用的HTTP库,用于发送HTTP请求和处理响应。
  • httpx: 现代化的HTTP客户端,支持异步和同步请求。

2. 解析库: 解析库用于从HTML或XML文档中提取所需的数据。

  • Beautiful Soup: 用于从HTML和XML文档中提取数据的库,支持灵活的查询和解析。
  • lxml: 高性能的XML和HTML解析库,同时支持XPath和CSS选择器。

3. 数据存储库: 存储爬取到的数据是爬虫的重要环节之一。

  • SQLAlchemy: 强大的SQL工具包,用于在Python中操作关系数据库。
  • Pandas: 数据分析库,可用于数据清洗和分析。
  • MongoDB: 非关系型数据库,适合存储和处理大量的非结构化数据。
  • SQLite: 轻量级的嵌入式关系数据库。

4. 异步库: 使用异步请求可以提高爬虫的效率。

  • asyncio: Python的异步IO库,用于编写异步代码。
  • aiohttp: 异步HTTP客户端,支持异步请求。

5. 动态渲染处理: 有些网页使用JavaScript进行动态渲染,需要使用浏览器引擎进行处理。

  • Selenium: 自动化浏览器操作库,用于处理JavaScript渲染的页面。

6. 反爬虫技术应对: 一些网站采取反爬虫措施,需要一些技术来绕过。

  • 代理池: 使用代理IP来避免频繁访问同一IP被封禁。
  • User-Agent随机化: 更改User-Agent以模拟不同的浏览器和操作系统。

这只是网络爬虫常用的一些技术和第三方库。根据实际项目需求,您可以选择合适的技术和工具来实现高效、稳定和有用的网络爬虫。


3 简单爬虫示例

 创建一个简单的爬虫,例如爬取一个静态网页上的文本信息,并将其输出。

import requests
from bs4 import BeautifulSoup# 发送GET请求获取网页内容
url = 'https://www.baidu.com'
response = requests.get(url)
response.encoding = 'utf-8'  # 指定编码为UTF-8
html_content = response.text# 使用Beautiful Soup解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')# 提取网页标题
title = soup.title.text# 提取段落内容
paragraphs = soup.find_all('p')
paragraph_texts = [p.text for p in paragraphs]# 输出结果
print("Title:", title)
print("Paragraphs:")
for idx, paragraph in enumerate(paragraph_texts, start=1):print(f"{idx}. {paragraph}")

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Databend 开源周报第 106 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 数据脱敏 Data…

APSIM模型参数优化 批量模拟丨气象数据准备、物候发育和光合生产、物质分配与产量模拟、土壤水分平衡算法、土壤碳氮平衡模块、农田管理模块等

随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…

nginx php-fpm安装配置

nginx php-fpm安装配置 nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。 nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选…

6.RocketMQ之索引文件ConsumeQueue

本文着重分析为consumequeue/topic/queueId目录下的索引文件。 1.ConsumeQueueStore public class ConsumeQueueStore {protected final ConcurrentMap<String>, ConcurrentMap<Integer>, ConsumeQueueInterface>> consumeQueueTable;public boolean load(…

Sentinel 规则持久化

文章目录 Sentinel 规则持久化一、修改order-service服务1.引入依赖2.配置nacos地址 第二步修改非常麻烦&#xff0c;可以略过&#xff0c;直接使用已经打好包的来使用二、修改sentinel-dashboard源码1. 解压2. 修改nacos依赖3. 添加nacos支持4. 修改nacos地址5. 配置nacos数据…

micropython SSD1306/SSD1315驱动

目录 简介 代码 功能 显示ASCII字符 ​编辑 画任意直线 画横线 画竖线 画矩形 画椭圆 画立方体 画点阵图 翻转 反相 滚动 横向滚动 纵向滚动 奇葩滚动 简介 我重新写了一个驱动&#xff0c;增加了一些功能&#xff0c;由于我的硬件是128*64oled单色I2C&#xff0c;我只…

Hlang--用Python写个编程语言-判断与循环

文章目录 前言语法描述判断循环词法解析语法解析定义节点生成节点判断节点循环节点解释器处理判断节点循环处理前言 okey,很好,在上一篇文章当中,我们实现了这个基本的逻辑运算,所以的话,在这里,我们将可以实现到我们的这个判断和循环了。由于这里的话,我们的操作其实和…

UML图绘制 -- 类图

1.类图的画法 类 整体是个矩形&#xff0c;第一层类名&#xff0c;第二层属性&#xff0c;第三层方法。 &#xff1a;public- : private# : protected空格: 默认的default 对应的类写法。 public class Student {public String name;public Integer age;protected I…

浏览器渲染原理 - 输入url 回车后发生了什么

目录 渲染时间点渲染流水线1&#xff0c;解析&#xff08;parse&#xff09;HTML1.1&#xff0c;DOM树1.2&#xff0c;CSSOM树1.3&#xff0c;解析时遇到 css 是怎么做的1.4&#xff0c;解析时遇到 js 是怎么做的 2&#xff0c;样式计算 Recalculate style3&#xff0c;布局 la…

集群、负载均衡集群、高可用集群简介,LVS工作结构、工作模式、调度算法和haproxy/nginx模式拓扑介绍

一.集群的定义 1.定义 2.分类 &#xff08;1&#xff09;负载均衡集群&#xff08;LBC/LB&#xff09; &#xff08;2&#xff09;高可用集群&#xff08;HAC&#xff09; 二.使用集群的意义 1.高性价比和性能比 2.高可用性 3.可伸缩性强 4.持久和透明性高 三.常见的…

图像去雨-雨线清除-图像处理-(计算机作业附代码)

背景 多年来&#xff0c;图像去雨已经被广泛研究&#xff0c;使用传统方法和基于学习的方法。然而&#xff0c;传统方法如高斯混合模型和字典学习方法耗时&#xff0c;并且无法很好地处理受到严重雨滴影响的图像块。 算法 通过考虑雨滴条状特性和角度分布&#xff0c;这个问…

Mybatis查询数据库返回任意形式的返回结构

Mybatis查询数据库返回任意形式的返回结构 mapper的接口mapper.xml mapper的接口 假如有多个记录&#xff0c;可以将map放到 arraylist里 mapper.xml 主要是通过resultMap定义好映射格式

尼科彻斯定理-C语言/Java

描述 验证尼科彻斯定理&#xff0c;即&#xff1a;任何一个整数m的立方都可以写成m个连续奇数之和。 例如&#xff1a; 1^31 2^335 3^37911 4^313151719 输入一个正整数m&#xff08;m≤100&#xff09;&#xff0c;将m的立方写成m个连续奇数之和的形式输出。&…

vscode远程连接Linux失败,提示过程试图写入的管道不存在(三种解决办法)

vscode报错如下&#xff1a; 一、第一种情况 原因是本地的known_hosts文件记录服务器信息与现服务器的信息冲突了&#xff0c;导致连接失败。 解决方案就是把本地的known_hosts的原服务器信息全部删掉&#xff0c;然后重新连接。 二、第二种情况 在编写配置文件config时&…

RequestRespons

文章目录 Request&Respons1 Request和Response的概述2 Request对象2.1 Request继承体系2.2 Request获取请求数据2.2.1 获取请求行数据2.2.2 获取请求头数据2.2.3 获取请求体数据2.2.4 获取请求参数的通用方式 2.3 IDEA快速创建Servlet2.4 请求参数中文乱码问题2.4.1 POST请…

stable diffusion基础

整合包下载&#xff1a;秋叶大佬 【AI绘画8月最新】Stable Diffusion整合包v4.2发布&#xff01; 参照&#xff1a;基础04】目前全网最贴心的Lora基础知识教程&#xff01; VAE 作用&#xff1a;滤镜微调 VAE下载地址&#xff1a;C站&#xff08;https://civitai.com/models…

Oracle将与Kubernetes合作推出DevOps解决方案!

导读Oracle想成为云计算领域的巨头&#xff0c;但它不是推出自己品牌的云DevOps软件&#xff0c;而是将与CoreOS在Kubernetes端展开合作。七年前&#xff0c;Oracle想要成为Linux领域的一家重量级公司。于是&#xff0c;Oracle主席拉里埃利森&#xff08;Larry Ellison&#xf…

Lnton羚通关于【PyTorch】教程:torchvision 目标检测微调

torchvision 目标检测微调 本教程将使用Penn-Fudan Database for Pedestrian Detection and Segmentation 微调 预训练的Mask R-CNN 模型。 它包含 170 张图片&#xff0c;345 个行人实例。 定义数据集 用于训练目标检测、实例分割和人物关键点检测的参考脚本允许轻松支持添加…

【环境配置】Windows 10 安装 PyTorch 开发环境,以及验证 YOLOv8

Windows 10 安装 PyTorch 开发环境&#xff0c;以及验证 YOLOv8 最近搞了一台Windows机器&#xff0c;准备在上面安装深度学习的开发环境&#xff0c;并搭建部署YOLOv8做训练和测试使用&#xff1b; 环境&#xff1a; OS&#xff1a; Windows 10 显卡&#xff1a; RTX 3090 安…

STM32 F103C8T6学习笔记9:0.96寸单色OLED显示屏—自由取模显示—显示汉字与图片

今日学习0.96寸单色OLED显示屏的自由取模显示: 宋体汉字比较复杂&#xff0c;常用字符可以直接复制存下来&#xff0c;毕竟只有那么几十个字母字符&#xff0c;但汉字实在太多了&#xff0c;基本不会全部放在单片机里存着&#xff0c;一般用到多少个字就取几个字的模&#xff…