商城网站建设浩森宇特/泉州seo

商城网站建设浩森宇特,泉州seo,广州找人做网站,wordpress文章小尾巴Python 爬虫(Web Scraping)是指通过编写 Python 程序从互联网上自动提取信息的过程。 爬虫的基本流程通常包括发送 HTTP 请求获取网页内容、解析网页并提取数据,然后存储数据。 Python 的丰富生态使其成为开发爬虫的热门语言,特…

Python 爬虫(Web Scraping)是指通过编写 Python 程序从互联网上自动提取信息的过程。

爬虫的基本流程通常包括发送 HTTP 请求获取网页内容、解析网页并提取数据,然后存储数据。

Python 的丰富生态使其成为开发爬虫的热门语言,特别是由于其强大的库支持。

一般来说,爬虫的流程可以分为以下几个步骤:

  • 发送 HTTP 请求:爬虫通过 HTTP 请求从目标网站获取 HTML 页面,常用的库包括 [requests](https://www.runoob.com/python3/python-requests.html)
  • 解析 HTML 内容:获取 HTML 页面后,爬虫需要解析内容并提取数据,常用的库有 BeautifulSouplxmlScrapy 等。
  • 提取数据:通过定位 HTML 元素(如标签、属性、类名等)来提取所需的数据。
  • 存储数据:将提取的数据存储到数据库、CSV 文件、JSON 文件等格式中,以便后续使用或分析。

本章节主要介绍 BeautifulSoup,它是一个用于解析 HTML 和 XML 文档的 Python 库,能够从网页中提取数据,常用于网页抓取和数据挖掘。


BeautifulSoup

BeautifulSoup 是一个用于从网页中提取数据的 Python 库,特别适用于解析 HTML 和 XML 文件。

BeautifulSoup 能够通过提供简单的 API 来提取和操作网页中的内容,非常适合用于网页抓取和数据提取的任务。

安装 BeautifulSoup

要使用 BeautifulSoup,需要安装 beautifulsoup4 和 lxml 或 html.parser(一个 HTML 解析器)。

我们可以使用 pip 来安装这些依赖:

pip install beautifulsoup4
pip install lxml  # 推荐使用 lxml 作为解析器(速度更快)

如果你没有 lxml,可以使用 Python 内置的 html.parser 作为解析器。

基本用法

BeautifulSoup 用于解析 HTML 或 XML 数据,并提供了一些方法来导航、搜索和修改解析树。

BeautifulSoup 常见的操作包括查找标签、获取标签属性、提取文本等。

要使用 BeautifulSoup,需要先导入 BeautifulSoup,并将 HTML 页面加载到 BeautifulSoup 对象中。

通常,你会先用爬虫库(如 requests)获取网页内容:

实例

from bs4 import BeautifulSoup
import requests

# 使用 requests 获取网页内容
url = ‘https://cn.bing.com/’ # 抓取bing搜索引擎的网页内容
response = requests.get(url)

# 使用 BeautifulSoup 解析网页
soup = BeautifulSoup(response.text, ‘lxml’) # 使用 lxml 解析器
# 解析网页内容 html.parser 解析器
# soup = BeautifulSoup(response.text, ‘html.parser’)

获取网页标题:

实例

from bs4 import BeautifulSoup
import requests

# 指定你想要获取标题的网站
url = ‘https://cn.bing.com/’ # 抓取bing搜索引擎的网页内容

# 发送HTTP请求获取网页内容
response = requests.get(url)
# 中文乱码问题
response.encoding = ‘utf-8’
# 确保请求成功
if response.status_code == 200:
# 使用BeautifulSoup解析网页内容
soup = BeautifulSoup(response.text, ‘lxml’)

    \# 查找<title>标签  
title\_tag \= soup.find('title')\# 打印标题文本  
if title\_tag:  print(title\_tag.get\_text())  
else:  print("未找到<title>标签")  

else:
print(“请求失败,状态码:”, response.status_code)

执行以上代码,输出标题为:

搜索 - Microsoft 必应

中文乱码问题

使用 requests 库抓取中文网页时,可能会遇到编码问题,导致中文内容无法正确显示,为了确保能够正确抓取并显示中文网页,通常需要处理网页的字符编码。

自动检测编码 requests 通常会自动根据响应头中的 Content-Type 来推测网页的编码,但有时可能不准确,此时可以使用 chardet 来自动检测编码。

实例

import requests

url = ‘https://cn.bing.com/’
response = requests.get(url)

# 使用 chardet 自动检测编码
import chardet
encoding = chardet.detect(response.content)[‘encoding’]
print(encoding)
response.encoding = encoding

执行以上代码,输出为:

utf-8

如果你知道网页的编码(例如 utf-8 或 gbk),可以直接设置 response.encoding:

response.encoding = 'utf-8'  # 或者 'gbk',根据实际情况选择

查找标签

BeautifulSoup 提供了多种方法来查找网页中的标签,最常用的包括 find() 和 find_all()。

  • find() 返回第一个匹配的标签
  • find_all() 返回所有匹配的标签

实例

from bs4 import BeautifulSoup
import requests

# 指定你想要获取标题的网站
url = ‘https://www.baidu.com/’ # 抓取bing搜索引擎的网页内容

# 发送HTTP请求获取网页内容
response = requests.get(url)
# 中文乱码问题
response.encoding = ‘utf-8’

soup = BeautifulSoup(response.text, ‘lxml’)

# 查找第一个 标签
first_link = soup.find(‘a’)
print(first_link)
print(“----------------------------”)

# 获取第一个 标签的 href 属性
first_link_url = first_link.get(‘href’)
print(first_link_url)
print(“----------------------------”)

# 查找所有 标签
all_links = soup.find_all(‘a’)
print(all_links)

输出结果类似如下:

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
----------------------------
http://news.baidu.com
----------------------------
[<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>, <a class="mnav" href="https://www.hao123.com" name="tj_trhao123">hao123</a>, <a class="mnav" href="http://map.baidu.com" name="tj_trmap">地图</a>, <a class="mnav" href="http://v.baidu.com" name="tj_trvideo">视频</a>,

获取标签的文本

通过 get_text() 方法,你可以提取标签中的文本内容:

实例

from bs4 import BeautifulSoup
import requests

# 指定你想要获取标题的网站
url = ‘https://www.baidu.com/’ # 抓取bing搜索引擎的网页内容

# 发送HTTP请求获取网页内容
response = requests.get(url)
# 中文乱码问题
response.encoding = ‘utf-8’

soup = BeautifulSoup(response.text, ‘lxml’)

# 获取第一个

标签中的文本内容
paragraph_text = soup.find(‘p’).get_text()

# 获取页面中所有文本内容
all_text = soup.get_text()
print(all_text)

输出结果类似如下:

 百度一下,你就知道           
...

查找子标签和父标签

你可以通过 parent 和 children 属性访问标签的父标签和子标签:

# 获取当前标签的父标签
parent_tag = first_link.parent# 获取当前标签的所有子标签
children = first_link.children

实例

from bs4 import BeautifulSoup
import requests

# 指定你想要获取标题的网站
url = ‘https://www.baidu.com/’ # 抓取bing搜索引擎的网页内容

# 发送HTTP请求获取网页内容
response = requests.get(url)
# 中文乱码问题
response.encoding = ‘utf-8’

soup = BeautifulSoup(response.text, ‘lxml’)

# 查找第一个 标签
first_link = soup.find(‘a’)
print(first_link)
print(“----------------------------”)

# 获取当前标签的父标签
parent_tag = first_link.parent
print(parent_tag.get_text())

输出结果类似如下:

<a class="mnav" href="http://news.baidu.com" name="tj_trnews">新闻</a>
----------------------------新闻 hao123 地图 视频 贴吧  登录   更多产品 

查找具有特定属性的标签

你可以通过传递属性来查找具有特定属性的标签。

例如,查找类名为 example-class 的所有 div 标签:

# 查找所有 class="example-class" 的 <div> 标签
divs_with_class = soup.find_all('div', class_='example-class')# 查找具有 id="unique-id" 的 <p> 标签
unique_paragraph = soup.find('p', id='unique-id')

获取搜索按钮,id 为 su :

实例

from bs4 import BeautifulSoup
import requests

# 指定你想要获取标题的网站
url = ‘https://www.baidu.com/’ # 抓取bing搜索引擎的网页内容

# 发送HTTP请求获取网页内容
response = requests.get(url)
# 中文乱码问题
response.encoding = ‘utf-8’

soup = BeautifulSoup(response.text, ‘lxml’)

# 查找具有 id=“unique-id” 的 标签
unique_input = soup.find(‘input’, id=‘su’)

input_value = unique_input[‘value’] # 获取 input 输入框的值

print(input_value)

输出结果为:

百度一下

高级用法

CSS 选择器

BeautifulSoup 也支持通过 CSS 选择器来查找标签。

select() 方法允许使用类似 jQuery 的选择器语法来查找标签:

# 使用 CSS 选择器查找所有 class 为 'example' 的 <div> 标签
example_divs = soup.select('div.example')# 查找所有 <a> 标签中的 href 属性
links = soup.select('a[href]')

处理嵌套标签

BeautifulSoup 支持深度嵌套的 HTML 结构,你可以通过递归查找子标签来处理这些结构:

# 查找嵌套的 <div> 标签
nested_divs = soup.find_all('div', class_='nested')
for div in nested_divs:print(div.get_text())

修改网页内容

BeautifulSoup 允许你修改 HTML 内容。

我们可以修改标签的属性、文本或删除标签:

实例

# 修改第一个 标签的 href 属性
first_link[‘href’] = ‘http://new-url.com’

# 修改第一个

标签的文本内容
first_paragraph = soup.find(‘p’)
first_paragraph.string = ‘Updated content’

# 删除某个标签
first_paragraph.decompose()

转换为字符串

你可以将解析的 BeautifulSoup 对象转换回 HTML 字符串:

# 转换为字符串
html_str = str(soup)

BeautifulSoup 属性与方法

以下是 BeautifulSoup 中常用的属性和方法:

方法/属性描述示例
BeautifulSoup()用于解析 HTML 或 XML 文档并返回一个 BeautifulSoup 对象。soup = BeautifulSoup(html_doc, 'html.parser')
.prettify()格式化并美化文档内容,生成结构化的字符串。print(soup.prettify())
.find()查找第一个匹配的标签。tag = soup.find('a')
.find_all()查找所有匹配的标签,返回一个列表。tags = soup.find_all('a')
.find_all_next()查找当前标签后所有符合条件的标签。tags = soup.find('div').find_all_next('p')
.find_all_previous()查找当前标签前所有符合条件的标签。tags = soup.find('div').find_all_previous('p')
.find_parent()返回当前标签的父标签。parent = tag.find_parent()
.find_all_parents()查找当前标签的所有父标签。parents = tag.find_all_parents()
.find_next_sibling()查找当前标签的下一个兄弟标签。next_sibling = tag.find_next_sibling()
.find_previous_sibling()查找当前标签的前一个兄弟标签。prev_sibling = tag.find_previous_sibling()
.parent获取当前标签的父标签。parent = tag.parent
.next_sibling获取当前标签的下一个兄弟标签。next_sibling = tag.next_sibling
.previous_sibling获取当前标签的前一个兄弟标签。prev_sibling = tag.previous_sibling
.get_text()提取标签内的文本内容,忽略所有HTML标签。text = tag.get_text()
.attrs返回标签的所有属性,以字典形式表示。href = tag.attrs['href']
.string获取标签内的字符串内容。string_content = tag.string
.name返回标签的名称。tag_name = tag.name
.contents返回标签的所有子元素,以列表形式返回。children = tag.contents
.descendants返回标签的所有后代元素,生成器形式。for child in tag.descendants: print(child)
.parent获取当前标签的父标签。parent = tag.parent
.previous_element获取当前标签的前一个元素(不包括文本)。prev_elem = tag.previous_element
.next_element获取当前标签的下一个元素(不包括文本)。next_elem = tag.next_element
.decompose()从树中删除当前标签及其内容。tag.decompose()
.unwrap()移除标签本身,只保留其子内容。tag.unwrap()
.insert()向标签内插入新标签或文本。tag.insert(0, new_tag)
.insert_before()在当前标签前插入新标签。tag.insert_before(new_tag)
.insert_after()在当前标签后插入新标签。tag.insert_after(new_tag)
.extract()删除标签并返回该标签。extracted_tag = tag.extract()
.replace_with()替换当前标签及其内容。tag.replace_with(new_tag)
.has_attr()检查标签是否有指定的属性。if tag.has_attr('href'):
.get()获取指定属性的值。href = tag.get('href')
.clear()清空标签的所有内容。tag.clear()
.encode()编码标签内容为字节流。encoded = tag.encode()
.is_empty_element检查标签是否是空元素(例如 <br><img> 等)。if tag.is_empty_element:
.is_ancestor_of()检查当前标签是否是指定标签的祖先元素。if tag.is_ancestor_of(another_tag):
.is_descendant_of()检查当前标签是否是指定标签的后代元素。if tag.is_descendant_of(another_tag):

其他属性

方法/属性描述示例
.style获取标签的内联样式。style = tag['style']
.id获取标签的 id 属性。id = tag['id']
.class_获取标签的 class 属性。class_name = tag['class']
.string获取标签内部的字符串内容,忽略其他标签。content = tag.string
.parent获取标签的父元素。parent = tag.parent

其他

方法/属性描述示例
find_all(string)使用字符串查找匹配的标签。tag = soup.find_all('div', class_='container')
find_all(id)查找指定 id 的标签。tag = soup.find_all(id='main')
find_all(attrs)查找具有指定属性的标签。tag = soup.find_all(attrs={"href": "http://example.com"})

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

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

相关文章

图像分类项目1:基于卷积神经网络的动物图像分类

一、选题背景及动机 在现代社会中&#xff0c;图像分类是计算机视觉领域的一个重要任务。动物图像分类具有广泛的应用&#xff0c;例如生态学研究、动物保护、农业监测等。通过对动物图像进行自动分类&#xff0c;可以帮助人们更好地了解动物种类、数量和分布情况&#xff0c;…

PHP:IDEA开发工具配置XDebug,断点调试

文章目录 一、php.ini配置二、IDEA配置 一、php.ini配置 [xdebug] zend_extension"F:\wamp64\bin\php\php7.4.0\ext\php_xdebug-2.8.0-7.4-vc15-x86_64.dll" xdebug.remote_enable on xdebug.remote_host 127.0.0.1 xdebug.remote_port 9001 xdebug.idekey"…

【Java】使用jdk自带的zip压缩实现任意文件压缩打包下载功能(复制即用)

前言 在实际项目中&#xff0c;我们可能会接到将文件或者资料打包压缩导出的需求&#xff0c;例如将系统中某些生成的文件一起打包压缩下载提供给客户使用&#xff0c;今天提供一个jdk自带的工具类快速实现打包压缩的功能&#xff0c;方法我已经封装好&#xff0c;大家如果在项…

腾讯云扩容记录

腾讯云扩容&#xff1a; sudo yum install -y cloud-utils-growpart 安装扩容工具 sudo file -s /dev/vda1 有数据 sudo LC_ALLen_US.UTF-8 growpart /dev/vda 1 sudo resize2fs /dev/vda1 df -Th 完毕 以下是对执行的命令的详细解释以及背后的原理&#xff1a; 1. 安装 cloud…

服务流程设计和服务或端口重定向及其websocket等应用示例

服务流程设计和服务或端口重定向及其websocket等应用示例 目录 服务或端口重定向的服务设计和websocket等应用示例 一、通用请求控制流程 1.1、入口 1.2、所有GET请求首先预检控制单元 1.3、http请求会分别自动307重定向 1.4、所有请求首先执行跨源控制单元 1.5、然后…

使用DeepSeek+KIMI生成高质量PPT

一、使用DeepSeek DeepSeek官网&#xff1a;DeepSeek 点击“开始对话”&#xff0c;进入交互页面。 在上图中&#xff0c;输入问题&#xff0c;即可获取AI生成的结果。 基础模型&#xff08;V3&#xff09;&#xff1a;通用模型&#xff08;2024.12&#xff09;&#xff0c;高…

MySQL—使用binlog日志恢复数据

一、binlog日志恢复数据简介 在 MySQL 中&#xff0c;使用二进制日志&#xff08;binlog&#xff09;恢复数据是一种常见的用于故障恢复或数据找回的方法。以下是详细的使用步骤&#xff1a; 确认 binlog 已启用&#xff1a;首先需要确认 MySQL 服务器已经启用了二进制日志功…

VADv2: 基于矢量表征和概率规划的E2E架构

1. 写在前面 今天分享一篇自动驾驶领域的论文VADv2(End-to-End Vectorized Autonomous Driving via Probabilistic Planning), 基于矢量表征和概率规划的E2E架构,2024年2月份华中科技大和地平线合作的一篇文章, 在经典的端到端模型架构上作出了基于概率规划去输出规划轨迹的…

NLP11-命名实体识别(NER)概述

目录 一、序列标注任务 常见子任务 二、 命名实体识别&#xff08;NER&#xff09; &#xff08;一&#xff09;简介 &#xff08;二&#xff09;目标 &#xff08;三&#xff09;应用场景 &#xff08;四&#xff09;基本方法 &#xff08;五&#xff09;工具与资源 一…

虚拟仿真无线路由器5G和2.4G发射信号辐射对比(虚拟仿真得出最小安全距离,与国际标准要求一致)

1、前言 有人说&#xff0c;只要有电磁波的地方就有辐射。5G和2.4G信号辐射强度是多少&#xff1f;是否会对人体构成危害&#xff1f;无线路由器的2.4GHz频段&#xff0c;频率范围&#xff1a;2.4 GHz 至 2.4835 GHz&#xff0c;信道宽度&#xff1a;通常为20 MHz&#xff0c;…

【数据挖掘】Matplotlib

Matplotlib 是 Python 最常用的 数据可视化 库之一&#xff0c;在数据挖掘过程中&#xff0c;主要用于 数据探索 (EDA)、趋势分析、模式识别 和 结果展示。 &#x1f4cc; 1. Matplotlib 基础 1.1 安装 & 导入 # 如果未安装 Matplotlib&#xff0c;请先安装 # pip instal…

DHCP配置实验

实验拓扑图 首先配置server的IP地址和网关 接下来配置R1 undo info-center enable dhcp enable //开启DHCP服务 ip pool dhcp-pool1 //开始配置dhcp地址池 gateway-list 192.168.1.254 //配置网关 network 192.168.1.0 mask 255.255.255.0 //配置网段和子网掩码 dns-list …

Linux:ELF文件-静动态库原理

✨✨所属专栏&#xff1a;Linux✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ ELF文件 什么是编译&#xff1f;编译就是将程序源代码编译成能让CPU直接执行的机器代码 如果我们要编译一个 .c文件&#xff0c;使用gcc -c将.c文件编译为二进制文件.o &#xff0c;如果一个项目有多个.…

Towards Graph Foundation Models: A Survey and Beyond

Towards Graph Foundation Models: A Survey and Beyond WWW24 ​#paper/⭐⭐⭐#​ #paper/&#x1f4a1;#​ 背景和动机 背景与意义 随着基础模型&#xff08;如大语言模型&#xff09;在NLP等领域的突破&#xff0c;图机器学习正经历从浅层方法向深度学习的范式转变。GFM…

基于 Python 深度学习的电影评论情感分析可视化系统(2.0 全新升级)

基于 Python 深度学习的电影评论情感分析可视化系统&#xff0c;基于 Flask 深度学习&#xff0c;构建了一个 影评情感分析系统&#xff0c;能够 自动分析影评、计算情感趋势 并 可视化展示&#xff0c;对于电影行业具有重要参考价值&#xff01; 基于 Python 深度学习的电影评…

Cargo, the Rust package manager, is not installed or is not on PATH.

今天在Windows操作系统上通过pip 安装jupyter的时候遇到这个报错&#xff0c;Cargo, the Rust package manager, is not installed or is not on PATH.。 解决办法 官网&#xff1a;https://rustup.rs/# 下载&#xff1a;https://win.rustup.rs/x86_64 安装完成之后&#xff0c…

CSS—text文本、font字体、列表list、表格table、表单input、下拉菜单select

目录 1.文本 2.字体 3.列表list a.无序列表 b.有序列表 c.定义列表 4.表格table a.内容 b.合并单元格 3.表单input a.input标签 b.单选框 c.上传文件 4.下拉菜单 1.文本 属性描述color设置文本颜色。direction指定文本的方向 / 书写方向。letter-spacing设置字符…

开启AI短剧新纪元!SkyReels-V1/A1双剑合璧!昆仑万维开源首个面向AI短剧的视频生成模型

论文链接&#xff1a;https://arxiv.org/abs/2502.10841 项目链接&#xff1a;https://skyworkai.github.io/skyreels-a1.github.io/ Demo链接&#xff1a;https://www.skyreels.ai/ 开源地址&#xff1a;https://github.com/SkyworkAI/SkyReels-A1 https://github.com/Skywork…

数学建模:MATLAB极限学习机解决回归问题

一、简述 极限学习机是一种用于训练单隐层前馈神经网络的算法&#xff0c;由输入层、隐藏层、输出层组成。 基本原理&#xff1a; 输入层接受传入的样本数据。 在训练过程中随机生成从输入层到隐藏层的所有连接权重以及每个隐藏层神经元的偏置值&#xff0c;这些参数在整个…

【计算机网络入门】初学计算机网络(七)

目录 1. 滑动窗口机制 2. 停止等待协议&#xff08;S-W&#xff09; 2.1 滑动窗口机制 2.2 确认机制 2.3 重传机制 2.4 为什么要给帧编号 3. 后退N帧协议&#xff08;GBN&#xff09; 3.1 滑动窗口机制 3.2 确认机制 3.3 重传机制 4. 选择重传协议&#xff08;SR&a…