实现静态网络爬虫(入门篇)

一、了解基本概念以及信息

1.什么是爬虫

爬虫是一段自动抓取互联网信息的程序,可以从一个URL出发,访问它所关联的URL,提取我们所需要的数据。也就是说爬虫是自动访问互联网并提取数据的程序。

它可以将互联网上的数据为我所用,开发出属于自己的网站或APP。

2.在爬虫程序中有三个模块

(1)URL管理器:对将要爬取的URL和已经爬取过的URL这两个数据进行管理

(2)网页下载器:将URL管理器里提供的一个URL对应的网页下载下来,存储为一个字符串,这个字符串会传送给网页解析器进行解析  

(3)网页解析器:一方面会解析出有价值的数据,另一方面,由于每一个页面都有很多指向其它页面的网页,这些URL被解析出来之后,可以补充进URL管理器

3.网页解析器——LXML和Xpath

1.网页解析概述:

除了学会向服务器发出请求、下载HTML源码,要获取结构化的数据还面临一个最常见的任务,就是从HTML源码中提取数据。

三种方法:

正则表达式

lxml库

BeautifulSoup

针对文本的解析,用正则表达式

针对html/xml的解析,有Xpath、BeautifulSoup、正则表达式

针对JSON的解析,有JSONPath

2.xpath(XML Path Language)实现路径选择,变换路径实现对信息的采集。使用路径表达式来选取XML文档中的节点或者节点集

3.Xpath里面管理扩展程序保持一个类似这样的格式

// 是当前根目录下 @ [] 通过检查找到你想要的东西

4.如何Copy   Xpath,以豆瓣电影为例​​​​​​(http:淄博 - 在线购票&影讯)

右键点击检查按钮

进入Xpath的管理扩展程序,具体的插件要下载安装找教程

就像这样:

具体的解释:

5.Lxml库:

lxml 是 一个HTML/XML的解析器,主要的功能是如何解析和提取 HTML/XML 数据。

lxml和正则一样,也是用 C 实现的,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

lxml python 官方文档:http://lxml.de/index.html

需要安装C语言库,可使用 pip 安装:pip install lxml

Lxml进行解析封装:

我们可以利用他来解析HTML代码,并且在解析HTML代码的时候,如果HTML代码不规范,他会自动的进行补全

1.使用 lxml 的 etree 库 from lxml import etree

2.python 3.5后的lxml模块中不能再直接引入etree模块,需要使用以下方法引用

from lxml import html

etree=html.etree

二、如何使用PyCharm写代码来实现网络爬虫

淄博 - 在线购票&影讯淄博电影院在线优惠购票及影讯排片查询https://movie.douban.com/cinema/nowplaying/zibo/还是以这个网址为例:

1.url就是你要爬虫页面的网址,headers是一个请求头,要这样寻找:

1.还是要在页面上右键检查

2.这个代码是一个简单的网络爬虫,用于从豆瓣电影的“正在上映”页面中提取电影信息。代码详情:

# 导入所需的库
import requests  # 用于发送HTTP请求
from bs4 import BeautifulSoup  # 用于解析HTML文档# 设置目标URL和请求头
url = "https://movie.douban.com/cinema/nowplaying/zibo/"  # 豆瓣电影正在上映页面的URL
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0"
}  # 请求头,模拟浏览器访问,避免被服务器识别为爬虫# 发送HTTP GET请求,获取网页内容
res = requests.get(url, headers=headers)  # 使用requests库发送请求,获取响应对象
soup = BeautifulSoup(res.text, "lxml")  # 使用BeautifulSoup解析HTML文档,lxml是解析器类型# 查找电影列表
lists = soup.find("ul", class_="lists")  # 在HTML文档中查找第一个<ul>标签,且其class属性为"lists"
if lists:  # 如果找到了电影列表movies = []  # 初始化一个空列表,用于存储提取的电影信息# 查找所有<li>标签,且其class属性为"stitle"lis = lists.find_all("li", class_="stitle")for li in lis:  # 遍历每个<li>标签a = li.find("a")  # 在<li>标签中查找<a>标签if a:  # 如果找到了<a>标签title = a.get_text()  # 获取<a>标签的文本内容,即电影标题href = a["href"]  # 获取<a>标签的href属性值,即电影详情页的链接movie = {"title": title.strip(), "href": href}  # 将电影标题和链接以字典形式存储movies.append(movie)  # 将字典添加到movies列表中# 输出方式1:直接打印字典列表# print(movies)  # 直接输出movies列表,内容为字典形式# 输出方式2:换行输出每个电影的标题和链接for movie in movies:  # 遍历movies列表中的每个电影print(f"Title: {movie['title']}\nLink: {movie['href']}\n")  # 打印电影标题和链接,并换行
else:  # 如果没有找到电影列表print("未找到电影列表")  # 打印提示信息# 或者这样写(注释掉的代码):
# if lists:
#     movies = []
#     for li in lists.find_all("li", class_="stitle"):
#         a = li.find("a")
#         if a:
#             title = a.get_text()
#             href = a["href"]
#             movies.append({"title": title.strip(), "href": href})
#     print(movies)  # 直接输出movies列表,内容为字典形式
# else:
#     print("未找到电影列表")  # 打印提示信息

3.代码功能总结

  1. 导入库:使用 requests 发送 HTTP 请求,使用 BeautifulSoup 解析 HTML 文档。

  2. 设置 URL 和请求头:定义目标 URL 和请求头,模拟浏览器访问。

  3. 发送请求并解析 HTML:获取网页内容并解析为 BeautifulSoup 对象。

  4. 查找电影列表:通过 HTML 标签和类名定位电影列表。

  5. 提取电影信息:从每个电影条目中提取标题和链接,并存储在列表中。

  6. 输出结果

    • 方式1:直接打印 movies 列表,输出字典形式的内容。

    • 方式2:遍历 movies 列表,换行输出每个电影的标题和链接。

这是运行详情,其他的页面也是同样的道理。

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

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

相关文章

Net8 Spire最新版去水印,去页数限制,转word/pptx/ofd等

新建控制台程序&#xff0c;添加Spire.pdf&#xff0c;最新版本为2024年7月17日 下载连接&#xff1a; Net8 Spire最新版去水印&#xff0c;去页数限制,转word/pptx/ofd等 https://download.csdn.net/download/LongtengGensSupreme/90459916 把下载的Spire.Pdf.dll类库版本 …

MyBatis增删改查:静态与动态SQL语句拼接及SQL注入问题解析

MyBatis 是一个优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集的工作。本文将深入探讨 MyBatis 中的增删改查操作&#xff0c;重点讲解静态与动态 SQL 语句的拼接&#xff0c;并分析 S…

《苍穹外卖》SpringBoot后端开发项目重点知识整理(DAY1 to DAY3)

目录 一、在本地部署并启动Nginx服务1. 解压Nginx压缩包2. 启动Nginx服务3. 验证Nginx是否启动成功&#xff1a; 二、导入接口文档1. 黑马程序员提供的YApi平台2. YApi Pro平台3. 推荐工具&#xff1a;Apifox 三、Swagger1. 常用注解1.1 Api与ApiModel1.2 ApiModelProperty与Ap…

本地部署自己的多专家协作系统:环境配置篇1

本项目旨在模拟多个行业专家对问题进行精细分工&#xff0c;并逐一回答后汇总&#xff0c;从而得到更专业的回复。 链接&#xff1a;MultyAgentCollabration项目地址 配置的B站讲解视频&#xff1a;B站讲解视频 本文着重介绍环境配置方法 一定要先下拉项目哦&#xff0c;或者…

FFmpeg入门:最简单的音视频播放器

FFmpeg入门&#xff1a;最简单的音视频播放器 前两章&#xff0c;我们已经了解了分别如何构建一个简单和音频播放器和视频播放器。 FFmpeg入门&#xff1a;最简单的音频播放器 FFmpeg入门&#xff1a;最简单的视频播放器 本章我们将结合上述两章的知识&#xff0c;看看如何融…

ThinkPHP框架

在电脑C磁盘中安装composer 命令 在电脑的D盘中创建cd文件夹 切换磁盘 创建tp框架 创建一个aa的网站&#xff0c;更换路径到上一步下载的tp框架路径 在管理中修改路径 下载压缩包public和view 将前面代码中的public和view文件替换 在PHPStom 中打开文件 运行指定路径 修改demo…

HTTPS加密原理详解

目录 HTTPS是什么 加密是什么 HTTPS的工作流程 1.使用对称加密 2.引入非对称加密 3.引入证书机制 客户端验证证书真伪的过程 签名的加密流程 整体工作流程 总结 HTTPS是什么 HTTPS协议也是一个应用程协议&#xff0c;是在HTTP的基础上加入了一个加密层&#xff0c;由…

基于SpringBoot的餐厅点餐管理系统设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

第十五届蓝桥杯省赛电子类单片机学习过程记录(客观题)

客观试题: 01.典型的BUCK电源电路包含哪些关键器件(ABCD) A. 电容 B. 二极管 C. 电感 D. MOSFET 解析: 典型的 BUCK 电源电路是一种降压型的直流-直流转换电路,它包含以下关键器件: A.电容:电容在电路中起到滤波的作用。输入电容用于平滑输入电压的波动,减少电源噪声对…

基于单片机的智慧农业大棚系统(论文+源码)

1系统整体设计 经过上述的方案分析&#xff0c;采用STM32单片机为核心&#xff0c;结合串口通信模块&#xff0c;温湿度传感器&#xff0c;光照传感器&#xff0c;土壤湿度传感器&#xff0c;LED灯等硬件设备来构成整个控制系统。系统可以实现环境的温湿度检测&#xff0c;土壤…

【GPT入门】第1课准备环境

【GPT入门】第1课 准备环境 1.安装conda环境 参考我的安装文档&#xff1a;https://blog.csdn.net/spark_dev/article/details/145071250 2.安装idea,或其它开发软件 3.idea中选择conda的python idea会为每个项目配置一个独立的python环境&#xff0c;方便python版本管理 新建…

【hello git】git rebase、git merge、git stash、git cherry-pick

目录 一、git merge&#xff1a;保留了原有分支的提交结构 二、git rebase&#xff1a;提交分支更加整洁 三、git stash 四、git cherry-pick 共同点&#xff1a;将 一个分支的提交 合并到 到另一个上分支上去 一、git merge&#xff1a;保留了原有分支的提交结构 现有一个模型…

Phi-4-multimodal:图、文、音频统一的多模态大模型架构、训练方法、数据细节

Phi-4-Multimodal 是一种参数高效的多模态模型&#xff0c;通过 LoRA 适配器和模式特定路由器实现文本、视觉和语音/音频的无缝集成。训练过程包括多阶段优化&#xff0c;确保在不同模式和任务上的性能&#xff0c;数据来源多样&#xff0c;覆盖高质量网络和合成数据。它的设计…

简单的二元语言模型bigram实现

内容总结归纳自视频&#xff1a;【珍藏】从头开始用代码构建GPT - 大神Andrej Karpathy 的“神经网络从Zero到Hero 系列”之七_哔哩哔哩_bilibili 项目&#xff1a;https://github.com/karpathy/ng-video-lecture Bigram模型是基于当前Token预测下一个Token的模型。例如&#x…

猫耳大型活动提效——组件低代码化

1. 引言 猫耳前端在开发活动的过程中&#xff0c;经历过传统的 pro code 阶段&#xff0c;即活动页面完全由前端开发编码实现&#xff0c;直到 2020 年接入公司内部的低代码活动平台&#xff0c;满足了大部分日常活动的需求&#xff0c;运营可自主配置活动并上线&#xff0c;释…

数据库基础以及基本建库建表的简单操作

文章目录 一、数据库是啥1.1、数据库的概念1.1、关系型数据库、非关系型数据库1.1、数据库服务器&#xff0c;数据库与表之间的关系 二、为啥要使用数据库2.1&#xff1a;传统数据文件存储2.2&#xff1a;数据库存储数据2.3、结论 三、使用数据库了会咋样四、应该咋用数据库&am…

常用无功功率算法的C语言实现(二)

0 前言 尽管数字延迟法和积分移相法在不间断采样的无功功率计算中得到了广泛应用,但它们仍存在一些固有缺陷。 对于数字延迟法而言,其需要额外存储至少1/4周期的采样点,在高采样频率的场景下,这对存储资源的需求不可忽视。而积分移相法虽然避免了额外的存储开销,但为了抑制…

【Linux】初识线程

目录 一、什么是线程&#xff1a; 重定义线程和进程&#xff1a; 执行流&#xff1a; Linux中线程的实现方案&#xff1a; 二、再谈进程地址空间 三、小结&#xff1a; 1、概念&#xff1a; 2、进程与线程的关系&#xff1a; 3、线程优点&#xff1a; 4、线程…

【单片机】ARM 处理器简介

ARM 公司简介 ARM&#xff08;Advanced RISC Machine&#xff09; 是英国 ARM 公司&#xff08;原 Acorn RISC Machine&#xff09; 开发的一种精简指令集&#xff08;RISC&#xff09; 处理器架构。ARM 处理器因其低功耗、高性能、广泛适用性&#xff0c;成为嵌入式系统、移动…

​​《从事件冒泡到处理:前端事件系统的“隐形逻辑”》

“那天在document见到你的第一眼&#xff0c;我就下定决心要陪你到天荒地老” ---React 我将从事件从出现到被处理的各个过程来介绍事件机制&#xff1a; 这张图片给我们展示了react事件的各个阶段&#xff0c;我们可以看到有DOM&#xff0c;合成事件层&#xff0c;还有…