Python爬取静态网页技术解析

news2024/11/14 0:32:59

内容导读

  1. 实现HTTP请求
  2. 解析网页
  3. 存储数据
  4. 静态网页爬取实例

一、实现HTTP请求

1、爬虫场景简介

(1)基本功能

爬虫的基本功能是读取URL和爬取网页内容,这就需要爬虫具备能够实现HTTP请求的功能。请求过程主要包括生成HTTP请求、请求头处理、超时设置、请求重试、查看状态码等。

(2)实例介绍

通过Chrome开发者工具直接查看网页“http://www.jd.com”的页面元素、页面源代码和资源详细信息,并分别通过urllib 3库、Requests库实现向网页发送GET类型的HTTP请求,并获取返回的响应。

爬取步骤:

使用Chrome开发者工具查看页面元素、页面源代码和资源详细信息。

使用urllib 3库生成HTTP请求。

使用urllib 3库处理请求头。

使用urllib 3库设置超时时间(timeout)。

使用urllib 3库设置请求重试。

使用Requests库生成HTTP请求。

使用Requests库查看状态码与编码。

使用Requests库处理请求头与响应头。

使用Requests库设置超时时间。

2、使用Chrome开发者工具查看网页

Chrome浏览器提供了一个非常便利的开发者工具,供广大Web开发者使用,该工具提供查看网页元素、查看请求资源列表、调试JavaScript代码等功能。

该工具的打开方式是右击Chrome浏览器页面,在弹出的快捷菜单中单击下图所示的“检查”选项。

也可以单击Chrome浏览器右上角的菜单 ,如下图所示,单击“更多工具”选项中的“开发者工具”选项打开开发者工具,或直接使用“F12”键打开开发者工具,效果如下图:

网站地址:“https://www.jd.com”。

二、解析网页

通过解析网页可以获取网页包含的数据信息,如文本、图片、视频等,这需要爬虫具备定位网页中信息的位置并解析网页内容的功能。

本任务分别通过Xpath、Beautiful Soup库和正则表达式解析通过Requests库获取的网页“https://www.jd.com”的网页内容,即获取其中的元素及相关信息。

1、爬取步骤

使用lxml库的etree模块实现通过Xpath获取网页内容中的标题内容、节点下的文本内容。

使用Beautiful Soup库创建BeautifulSoup对象,将HTML文档转换为文档树。

使用Beautiful Soup库搜索文档树中的文本内容、属性值。

使用正则表达式匹配字符串。

使用正则表达式查找网页中的标题内容。

2、xml路径语言XPath

XML路径语言(XML Path Language,XPath)是一门在XML文档中查找信息的语言。

XPath最初被设计用于搜寻XML文档,但同样适用于HTML文档的搜索。

XPath的选择功能十分强大,它不仅提供了非常简洁明了的路径选择表达式,还提供了超过100个内建函数,用于字符串、数值、时间的匹配,以及节点、序列的处理等,几乎所有定位的节点都可以用XPath来选择。

使用Xpath需要从lxml库中导入etree模块,还需要使用HTML类对需要匹配的HTML对象进行初始化。HTML类的基本语法格式如下。

三、存储数据

爬虫通过解析网页获取页面中的数据后,还需要将获得的数据存储下来以供后续分析。

1、存储过程

使用JSON模块将Xpath获取的文本内容存储为JSON文件。

使用PyMySQL库将Beautiful Soup库获取的标题存储入MySQL数据库。

使用JSON模块将Xpath获取的文本内容存储为JSON文件。

使用PyMySQL库将Beautiful Soup库获取的标题存储入MySQL数据库。

2、将数据存储为JSON文件

JSON文件的操作在Python中分为解码和编码两种,都通过JSON模块来实现。

其中,编码过程为将Python对象转换为JSON对象的过程,而解码过程则相反,其将JSON对象转换为Python对象。

将数据存储为JSON文件的过程为一个编码过程,编码过程常用到dump函数和dumps函数。

两者的区别在于,dump函数将Python对象转换为JSON对象,并通过fp文件流将JSON对象写入文件内,而dumps函数则生成一个字符串。

dump函数和dumps函数的基本语法格式如下。

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)
json.dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

dump函数和dumps函数的常用参数及其说明。

3、连接方法

PyMySQL库使用connect函数连接数据库,connect函数的参数为Connection构造函数的参数,基本语法格式如下。

4、数据库操作函数

PyMySQL库中可以使用函数对返回的连接(connect)对象进行操作,常用的连接对象操作函数如表所示。

在通过Python操作数据库的过程中,通常使用pymysql.connect.cursor()方法获取游标,或使用pymysql.cursor.execute()方法对数据库进行操作,如创建数据库和数据表等,使用更多的为增、删、改、查等基本操作。游标对象也提供了很多种方法,常用的方法如表。

5、将数据存储到MySQL数据库

游标对象的创建是基于连接对象的,创建游标对象后即可通过SQL语句对数据库进行增、删、改、查等操作。

在连接的MySQL数据库中创建一个表名为class的表,该表包含id、name、text这3列,使用id列作为主键,之后将Beautiful Soup库获取的标题文本存入该表中。

四、静态网页爬取实例

爬取静态网页的内容,可以使用Python的requests库来获取网页内容,然后使用BeautifulSoup库来解析HTML并提取所需数据。

1、安装requestsbeautifulsoup4

# 如果已安装可跳过
pip install requests beautifulsoup4
# 或
py  -m  pip  install  requests beautifulsoup4

2、示例代码

# 导入库
import requests
from bs4 import BeautifulSoup
 
# 目标网页URL
url = 'https://www.jd.com'
 
# 发送HTTP请求
response = requests.get(url)
 
# 检查请求是否成功
if response.status_code == 200:
    # 使用BeautifulSoup解析网页内容
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 提取你感兴趣的数据,例如所有段落文本
    paragraphs = soup.find_all('p')
    for p in paragraphs:
        print(p.text)
else: # 搜索内容夫败提示
    print(f'Failed to retrieve page: status code {response.status_code}')

更多精彩内容请关注本站!

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

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

相关文章

《Programming from the Ground Up》阅读笔记:p95-p102

《Programming from the Ground Up》学习第6天,p95-p102总结,总计8页。 一、技术总结 1.directive(伪指令) 很多资料喜欢把directive和instruction都翻译成“指令”,这样在看到指令这个词时就不知道到底指的是什么?这里参考其它…

文件包含漏洞案例

一、PHP://INPUT Example 1&#xff1a;造成任意代码执行 源代码&#xff1a; <meta charset"utf8"> <?php error_reporting(0); $file $_GET["file"]; if(stristr($file,"php://filter") || stristr($file,"zip://") |…

在技术风暴中站稳脚跟:构建软件服务团队的应急韧性与高效响应力

在数字化浪潮汹涌的今天&#xff0c;软件服务已成为连接用户与企业的桥梁&#xff0c;其稳定性直接关系到用户体验、品牌信誉乃至企业的生存与发展。然而&#xff0c;即便是拥有庞大用户基础和先进技术的平台&#xff0c;如网易云音乐&#xff0c;也难以完全避免技术故障的突袭…

MySQL 系统学习系列 - SQL 语句 DQL 语句的使用(3)《MySQL系列篇-05》

SQL 语句 DQL 多表连接查询 连接与多表查询&#xff1a;连接是在多个表之间通过一定的连接条件&#xff0c;使表之间发生关联&#xff0c;进而能从多个表之间获取数据 基本简介与表之间的搭建&#xff08;用于使用多表查询语句-即准备工作&#xff09; 单词普及(名称)单词连…

HT-360A 360度全向强声广播、应急广播、全向声波驱鸟

1、产品简介 HT-360A多层叠装360向广播是北京恒星科通科技发展有限公司自主研发的一款应急广播专用设备&#xff0c;该设备内部采用4组换能器垂直阵列设置&#xff0c;水平采用指数函数碟形堆叠技术&#xff0c;在垂直方向上多层碟扬声器可实现360度环形垂直阵列&#xff0c;实…

MYSQL集群技术

---------------第一部分---------------------- 一.mysql源码部署 环境&#xff1a;rhel7.9 1.1.下载安装包 官网&#xff1a;http://www.mysql.com 1.2.在linux下部署mysql 1.创建登录用户和数据目录&#xff0c;并给数据目录赋权&#xff0c;因为配置文件读取需要权限&…

Delphi5实现秒钟程序

效果图 目的 这个项目非常简单&#xff0c;开发这个是为了方便看秒钟&#xff0c;进行秒杀活动。 虽然目前啥也抢不到&#xff0c;但是有志者事竟成。 完整代码 unit Unit1;interfaceusesSysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,Dialogs, For…

了解prolog规则

要推理先要有规则&#xff1b; 假设有一条规则&#xff0c; 如果X和Y是朋友&#xff0c;那么Y和X也是朋友&#xff1b; 这条规则写成这样&#xff0c; friend(X,Y) :- friend(Y, X). X和Y都是大写&#xff0c;表示这是两个变量&#xff1b;符号 :- 表示推理关系&…

多语言无障碍沟通:2024年英语翻译工具新趋势

随着科技的快速发展&#xff0c;一系列以人工智能为核心驱动的英语翻译工具应运而生&#xff0c;它们如同桥梁简化了跨越语言障碍的交流过程。本文将引领你深入探索这些神奇的英语翻译工具&#xff0c;揭示它们如何助力我们轻松跨越语言鸿沟&#xff0c;实现无缝的跨文化沟通。…

谷歌、火狐及Edge等浏览器中实现allWebPlugin中间件自动安装及升级

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品&#xff0c;致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX控件直接嵌入浏览器&#xff0c;实现插件加载、界面显示、接口调用、事件回调等。支持Chrome、Firefo…

wp-autopost-pro 3.7.8最新完美版

插件简介&#xff1a; 插件是wp-autopost-pro 3.7.8最新版本。 采集插件适用对象 1、刚建的wordpress站点内容比较少&#xff0c;希望尽快有比较丰富的内容&#xff1b; 2、热点内容自动采集并自动发布&#xff1b; 3、定时采集&#xff0c;手动采集发布或保存到草稿&#xff…

Python酷库之旅-第三方库Pandas(099)

目录 一、用法精讲 426、pandas.DataFrame.at属性 426-1、语法 426-2、参数 426-3、功能 426-4、返回值 426-5、说明 426-6、用法 426-6-1、数据准备 426-6-2、代码示例 426-6-3、结果输出 427、pandas.DataFrame.iat属性 427-1、语法 427-2、参数 427-3、功能 …

LeetCode //C - 331. Verify Preorder Serialization of a Binary Tree

331. Verify Preorder Serialization of a Binary Tree One way to serialize a binary tree is to use preorder traversal. When we encounter a non-null node, we record the node’s value. If it is a null node, we record using a sentinel value such as ‘#’. For…

ZMQ管道模型

案例一 生产者Producer #include <zmq.hpp> #include <iostream> #include <string> #include<chrono> #include<thread>using namespace std; using namespace zmq;int main() {context_t context(1);// 创建 PUSH 套接字&#xff0c;用于发送…

2000-2023年上市公司财务困境RLPM模型数据(含原始数据+计算结果)

2000-2023年上市公司财务困境RLPM模型数据&#xff08;含原始数据计算结果&#xff09; 1、时间&#xff1a;2000-2023年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;证券代码、证券简称、统计截止日期、是否剔除ST或*ST或PT股、是否剔除上市不满一年、已经退市或…

《深度学习》OpenCV 计算机视觉入门 (上篇)

目录 一、了解OpenCV 1、简介 2、导包 3、了解图片构成 二、函数运用 1、展示图片 2、展示图片属性 1&#xff09;img.shape 形状 2&#xff09;img.dtype 类型 像素值类型&#xff1a; 3&#xff09;img.size 尺寸 4&#xff09;演示&#xff0c;img为上图 …

【轨物方案】红外抄表装置在光伏电站项目中的应用

首先&#xff0c;红外抄表装置能够实现远程自动抄表&#xff0c;这对于光伏电站来说至关重要。由于光伏电站往往分布在广阔的区域&#xff0c;且电站设备可能位于偏远或难以到达的位置&#xff0c;使用红外抄表装置可以减少人工抄表的需要&#xff0c;提高数据采集的效率和准确…

79、ansible-----playbook2

1、作业 [roottest1 opt]# vim test2.yaml - name: this is muluhosts: 192.168.168.22gather_facts: falsevars: ##定义变量testtest:- /opt/test1 ##对变量进行赋值- /opt/test2- /opt/test3- /opt/test4tasks:- name: create mulufile:path: "{{item}}&q…

K8s之自动扩缩容

Kubernetes (K8s) 的动态扩缩容&#xff08;自动伸缩&#xff09;功能是集群管理中非常关键的一部分&#xff0c;能够根据工作负载的变化自动调整应用程序的副本数&#xff0c;以确保资源的高效利用和服务的稳定性。 K8s介绍文章 容器之k8s(Kubernetes)-CSDN博客 1. 动态扩缩容…

文件包含漏洞(1)

目录 PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 Example 2&#xff1a; 文件内容绕过 php://filer zip:// PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 搭建环境 <meta charset"utf8"> <?php error_repo…