首页 > 编程语言 >python教程---网络爬虫

python教程---网络爬虫

时间:2024-07-01 21:30:42浏览次数:20  
标签:Beautiful 匹配 Soup python text 爬虫 --- re html

7.1 urllib

Urllib是Python内置的一个用于读取来自Web的数据的库。它是一个请求库,可以用来发送HTTP请求,获取网页内容,支持多种HTTP方法,如GET和POST等。
使用Urllib读取网页内容的步骤如下:

  1. 导入Urllib库中的request模块。
import urllib.request
  1. 使用urlopen()函数发送HTTP请求,获取网页内容。
response = urllib.request.urlopen('http://www.example.com')
  1. 读取获取到的内容。可以使用read()、readline()和readlines()方法。
html = response.read()
  1. 对获取到的内容进行解码,以便得到字符串形式的内容。
html = html.decode('utf-8')
  1. 关闭响应对象。
response.close()

示例:

import urllib.request
url = 'http://www.example.com'
response = urllib.request.urlopen(url)
html = response.read()
html = html.decode('utf-8')
print(html)
response.close()

以上代码使用Urllib读取了http://www.example.com网站的内容,并将其打印出来。


7.2 正则表达式

正则表达式(Regular Expression,简称RegEx)是一种用于匹配字符串中字符组合的模式。在Python中,re模块提供了正则表达式的支持。正则表达式在网络爬虫中常用于解析网页内容,提取需要的数据。
使用正则表达式的基本步骤如下:

  1. 导入re模块。
import re
  1. 编写正则表达式模式。正则表达式的语法规则包括字符匹配、量词、分组等。
  2. 使用re模块提供的方法进行匹配。常见的方法有:
    • re.search(pattern, string): 在字符串中搜索模式,返回第一个匹配项的匹配对象。
    • re.match(pattern, string): 从字符串的起始位置匹配模式,返回匹配对象。
    • re.findall(pattern, string): 在字符串中找到所有匹配项,返回一个列表。
    • re.finditer(pattern, string): 在字符串中找到所有匹配项,返回一个迭代器。
    • re.sub(pattern, repl, string): 替换字符串中所有匹配的子串。
      示例:
import re
# 示例文本
text = "Hello, my phone number is 123-456-7890."
# 正则表达式模式,用于匹配电话号码
pattern = r'\d{3}-\d{3}-\d{4}'
# 使用re.search()查找匹配项
match = re.search(pattern, text)
# 如果找到匹配项,则输出
if match:
    print("Found phone number:", match.group())
else:
    print("No phone number found.")
# 使用re.findall()查找所有匹配项
phone_numbers = re.findall(pattern, text)
print("Phone numbers found:", phone_numbers)

输出:

Found phone number: 123-456-7890
Phone numbers found: ['123-456-7890']

在这个例子中,我们使用正则表达式\d{3}-\d{3}-\d{4}来匹配格式为XXX-XXX-XXXX的电话号码。re.search()用于找到第一个匹配项,而re.findall()用于找到所有匹配项。


7.3 Beautiful Soup
Beautiful Soup 是一个 Python 库,用于从 HTML 或 XML 文件中提取数据。它可以帮助我们解析网页内容,方便地提取出我们需要的数据。Beautiful Soup 与 lxml、html5lib 等解析器一起工作,提供了丰富的解析方法。
使用 Beautiful Soup 的基本步骤如下:

  1. 安装 Beautiful Soup 库。如果还没有安装,可以使用 pip 进行安装:
pip install beautifulsoup4
  1. 导入 Beautiful Soup 模块。
from bs4 import BeautifulSoup
  1. 加载 HTML 内容到 Beautiful Soup 对象。
soup = BeautifulSoup(html_content, 'html.parser')

其中 html_content 是你要解析的 HTML 内容,'html.parser' 是解析器,这里使用的是 Python 内置的 HTML 解析器。
4. 使用 Beautiful Soup 提供的方法提取数据。常见的方法有:

  • soup.find(): 查找第一个匹配的标签。
  • soup.find_all(): 查找所有匹配的标签。
  • soup.select(): 使用 CSS 选择器查找标签。
  • tag.get_text(): 获取标签内的文本内容。
    示例:
from bs4 import BeautifulSoup
# 示例 HTML 内容
html_content = """
<html>
<head>
<title>Example Web Page</title>
</head>
<body>
<h1>Welcome to Example Web Page</h1>
<p>This is a paragraph with some text.</p>
<ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>
</body>
</html>
"""
# 加载 HTML 内容到 Beautiful Soup 对象
soup = BeautifulSoup(html_content, 'html.parser')
# 提取标题文本
title = soup.find('title').get_text()
print("Title:", title)
# 提取所有的段落文本
paragraphs = soup.find_all('p')
for p in paragraphs:
    print("Paragraph:", p.get_text())
# 使用 CSS 选择器提取无序列表中的所有列表项
list_items = soup.select('ul li')
for item in list_items:
    print("List item:", item.get_text())

输出:

Title: Example Web Page
Paragraph: This is a paragraph with some text.
List item: Item 1
List item: Item 2
List item: Item 3

在这个例子中,我们使用 Beautiful Soup 来解析一个简单的 HTML 页面,提取了标题、段落文本以及无序列表中的列表项。Beautiful Soup 提供了丰富的 API 来方便地操作和提取网页内容。

标签:Beautiful,匹配,Soup,python,text,爬虫,---,re,html
From: https://blog.csdn.net/qq_44624290/article/details/140097793

相关文章

  • 【吴恩达机器学习-week2】可选实验:特征工程和多项式回归【Feature Engineering and Po
    支持我的工作......
  • 1-3.文本数据建模流程范例
    文章最前:我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github;这博客是记录我学习的点点滴滴,如果您对Python、Java、AI、算法有兴趣,可以关注我的动态,一起学习,共同进步。importos#mac系统上pytorch和matplotlib在ju......
  • 随机生成50个0-100之间的数字,生成对应个数的随机字母,再按数字大小从小到大排序最后写
    importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;importjava.util.Random;importjava.io.FileNotFoundException;importjava.io.PrintStream;publicclassRandomNum{publicstaticvoidmain(String[]args)throwsFileNotF......
  • 随记--软件设计
    输入输出技术:调节cpu和内存之间数据传输的差距程序控制查询:无条件传送和程序查询效率低严重影响cpu利用率程序中断方式:cpu与数据传输是并行的cpu无需等待DMA方式:高速批量数据交换(向cpu总线裁决逻辑提出总线请求cpu执行完当前总线周期即可释放总线控制权)中断处理过......
  • Python进阶教程--科学计算基础软件包NumPy
    NumPy(NumericalPython)是一个开源的Python库,用于科学计算。它提供了一个高性能的多维数组对象和用于处理这些数组的工具。NumPy是Python科学计算的基础库,被广泛用于数据分析、机器学习、科学计算等领域。1.1NumPy概述NumPy是Python的一个扩展库,主要用于处理大型多维数组......
  • educoder 机器学习 --- kNN算法
    第一关:#encoding=utf8importnumpyasnpfromcollectionsimportCounterclasskNNClassifier(object):def__init__(self,k):'''初始化函数:paramk:kNN算法中的k'''self.k=k#用来......
  • Luogu P6864 [RC-03] 记忆
    先考虑没有\(3\)操作该怎么做。对于当前字符串把其分成多组互不包含的括号的形式,即\((\cdots)()()\)这样,考虑经过\(1/2\)操作后对互不包含的括号组数\(b\)和答案\(v\)会产生什么影响。\(1\)操作,加上过后便会多上一组互不包含的括号,\(b\leftarrowb'+1\),同时这个......
  • 为Ubuntu-24.04-live-server-amd64磁盘扩容
    系列文章目录Ubuntu-24.04-live-server-amd64安装界面中文版文章目录系列文章目录前言一、检查系统本身情况1.用lsblk命令查看自己系统磁盘是什么状态2.用df-h命令查看文件系统的磁盘空间使用情况3.解决Ubuntu-24.04磁盘空间只能用一半的问题3-1扩展逻辑卷:3-2.......
  • springcloud-gateway 网关组件中文文档
      SpringCloud网关GreenwichSR5该项目提供了一个基于Spring生态系统的API网关,其中包括:Spring5,SpringBoot2和项目Reactor。SpringCloud网关的目的是提供一种简单而有效的方法来路由到API,并向它们提供跨领域的关注,例如:安全性,监视/度量和弹性。  如......
  • python 多版本python 共存 ,pip混乱问题
    问题:windows环境下装了两个版本的python,先装了3.11,再装了3.8想在3.8安装包,但是使用pip总是定位到3.11上去。全都配置了环境变量,他就认第一次安装的。解决办法:进入第二个安装的python3.8文件夹,python.exe改成python38.exe  (这个都明白什么意思吧,默认都是python.exe,你......