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

news2024/11/17 5:25:37

目录

 专栏导读 

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.coloradmin.cn/o/899571.html

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

相关文章

提高 Snowflake 工作效率的 6 大工具

推荐:使用 NSDT场景编辑器 助你快速搭建可二次编辑的3D应用场景 Snowflake 彻底改变了企业存储、处理和分析数据的方式,提供了无与伦比的灵活性、可扩展性和性能。但是,与任何强大的技术一样,要真正利用其潜力,必须拥有…

vsCode使用cuda

一、vsCode使用cuda 前情提要:配置好mingw: 1.安装cuda 参考: **CUDA Toolkit安装教程(Windows):**https://blog.csdn.net/qq_42951560/article/details/116131410 2.在vscode中添加includePath c_cp…

VS2015打开Qt的pro项目文件 报错

QT报错:Project ERROR: msvc-version.conf loaded but QMAKE_MSC_VER isn‘t set 解决方法: 找到本机安装的QT路径,找到“msvc-version.conf”文件,用记事本打开, 在其中添加版本“QMAKE_MSC_VER 1900”保存即可。 …

2023-8-18 二进制中1的个数

题目链接&#xff1a;二进制中1的个数 #include <iostream>using namespace std;int lowbit(int x) {return x&-x; }int main() {int n;cin >> n;for(int i 0; i < n; i){int x;cin >> x;int res 0;while(x) x - lowbit(x), res;cout << re…

sql:知识点记录一

1.Mysql逻辑架构&#xff1a;连接层、服务层、引擎层、存储层 2.show engines&#xff1a;查看存储引擎 3.Mysql两种存储引擎的区别&#xff1a; 建立索引&#xff1a;比如说用户很喜欢用name去查询表&#xff0c;就可以给数据库的name字段建立索引&#xff0c;提高查询效率&a…

stm32开关控制led灯泡(附Proteus电路图)

说明&#xff1a;我的灯泡工作电压2V&#xff0c;电流设置为10um,注意了不是10毫安时微安啊&#xff0c;要不然电流太小亮不起来的。 2&#xff1a;我用的开关不是按钮button而是switch, 3&#xff1a;PB0,PB1默认都是低电平&#xff0c;采用了PULLDOWN模式&#xff0c;如果设…

【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPullConsumer的实现原理及源码分析

前提介绍 在RocketMQ中一般有两种获取消息的方式&#xff0c;一个是拉(pull&#xff0c;消费者主动去broker拉取)&#xff0c;一个是推(push&#xff0c;主动推送给消费者)&#xff0c;在上一章节中已经介绍到了相关的Push操作&#xff0c;接下来的章节会介绍Pull操作方式的消…

LRU 算法

LRU 缓存淘汰算法就是一种常用策略。LRU 的全称是 Least Recently Used&#xff0c;也就是说我们认为最近使用过的数据应该是是「有用的」&#xff0c;很久都没用过的数据应该是无用的&#xff0c;内存满了就优先删那些很久没用过的数据。 力扣&#xff08;LeetCode&#xff09…

【最全】Python连接数据库取数与写入数据

不管是做数据分析还是风控建模&#xff0c;都避免不了从数据库中取数&#xff0c;和把数据写入数据库。本文整理连接数据库的不同方法&#xff0c;以及单条写入数据和批量写入数据。所有代码都实测可用&#xff0c;并实际应用于生产&#xff0c;分享给更多在这方面遇到困难的朋…

零基础自学:2023 年的今天,请谨慎进入网络安全行业

前言 2023 年的今天&#xff0c;慎重进入网安行业吧&#xff0c;目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多&#xff0c;还有很多高中被挖过来的大佬。 理由很简单&#xff0c;目前来说&#xff0c;信息安全的圈子人少&#xff0c;985、211 院校很多都才…

AI 绘画Stable Diffusion 研究(十二)SD数字人制作工具SadTlaker插件安装教程

免责声明: 本案例所用安装包免费提供&#xff0c;无任何盈利目的。 大家好&#xff0c;我是风雨无阻。 想必大家经常看到&#xff0c;无论是在产品营销还是品牌推广时&#xff0c;很多人经常以数字人的方式来为自己创造财富。而市面上的数字人收费都比较昂贵&#xff0c;少则几…

​网安板块是真风口还是炒作?

看需求&#xff0c;官方明确要求政企等在网安上投入的比重不低于10%&#xff0c;而当前&#xff0c;信息安占IT的投入比重不到3%&#xff01;即使是政府对网安和IT合规的要求高&#xff0c;占比高达23.7%&#xff0c;但是全国平均下来也不过5%&#xff0c;距离10%的投入要求&am…

中断之MSI和MSI-X的区别详细总结附图文快速掌握

目录 一、整体介绍二、MSI和MSI-X对比2.1 中断向量连续2.2 映射区域区别2.3 MSI-X配置空间2.3.1 MSI-X Capbility介绍2.3.2 Capbility ID介绍2.3.3 Message Control介绍2.3.4 MSI-X Table介绍2.3.5 MSI-X Pending Table&#xff08;PBA&#xff09;介绍 三、MSI 处理过程3.1 Me…

wsl,字体乱码问题

配置wsl&#xff0c;字体乱码问题 一、前言 用zsh配置好wsl&#xff0c;每次打开还是会出现乱码&#xff0c;只有再新打开一个终端才会显示字体 如下图&#xff1a;第一次打开&#xff0c;出现乱码 如图&#xff1a;按加号&#xff0c;再开一个新终端才会显示字体。 二、解…

IDEA:Error running,Command line is too long. 解决方法

报错如下&#xff1a; Error running SendSmsUtil. Command line is too long. Shorten the command line via JAR manifest or via a classpath file and rerun.原因是启动命令过长。 解决方法&#xff1a; 1、打开Edit Configurations 2、点击Modify options设置&#x…

React(6)

1.React插槽 import React, { Component } from react import Child from ./compoent/Childexport default class App extends Component {render() {return (<div><Child><div>App下的div</div></Child></div>)} }import React, { Compon…

remove、remove_if、remove_copy、remove_copy_if

remove(b,e,v) //[b,e) 删value remove_if(b,e,p) //[b,e) 删p条件 remove_copy(b,e,r,v) //[b,e) 删v&#xff0c;结果存入r remove_copy_if(b,e,r,p) //[b,e) 删p条件&#xff0c;结果存入r remove和remove_if结果相同&#xff0c;只是传入的条件不一样。示例图如下&#xf…

如何用输入函数为数组赋值

在编写程序时我们经常使用数组&#xff0c;而数组的大小可能是很大的但是我们并不需要为每个元素都自己赋值&#xff0c;我们可能会自定义输入数组元素个数&#xff0c;我们应该如何实现通过输入函数为数组赋值呢&#xff1f; 目录 第一种&#xff1a; 第二种&#xff1a; 第一…

信号量与管程

前言 我们知道&#xff0c;在并发领域内&#xff0c;需要关注分工、同步与互斥&#xff0c;针对分工问题&#xff0c;就是将任务拆解&#xff0c;分配给多个线程执行&#xff0c;而在多线程执行的过程中&#xff0c;需要解决线程之间的协作与互斥问题进而保证并发安全。那么解…

day-25 代码随想录算法训练营(19)回溯part02

216.组合总和||| 思路&#xff1a;和上题一样&#xff0c;差别在于多了总和&#xff0c;但是数字局限在1-9 17.电话号码的字母组合 思路&#xff1a;先纵向遍历第i位电话号码对于的字符串&#xff0c;再横向递归遍历下一位电话号码 93.复原IP地址 画图分析&#xff1a; 思…