Python爬虫网页元素定位术

目录
  • 实战场景
    • 基础用法如下所示
  • BeautifulSoup 模块的对象说明
    • BeautifulSoup 对象
    • Tag 对象
    • NavigableString 对象
    • Comment 对象
  • find() 方法和 find_all() 方法

实战场景

初学 Python 爬虫,十之八九大家采集的目标是网页,因此快速定位到网页内容,就成为我们面临的第一道障碍,本篇博客就为你详细说明最易上手的网页元素定位术,学完就会系列。

本文核心使用到的是 Beautiful Soup 模块,因此我们用来做测试采集的站点,也是其官网(现阶段爬虫采集越来越严格,很多站点不能在采集了,很容易被封杀,只能学谁就采集谁了)

官方站点:

www.crummy.com/software/BeautifulSoup/

Beautiful Soup 在 Python 爬虫圈知名度极高,而且非常好用,它是一款 Python 解析库,主要用于将 HTML 标签转换为 Python 对象树,然后让我们从对象树中提取数据。

模块的安装及其简单:

pip install bs4 -i 国内任意源即可

未来安装任何模块,都尽量使用国内源,速度快稳定。

该模块包名称为 bs4,安装的时候需要特别注意下。

基础用法如下所示

import requests
from bs4 import BeautifulSoup
def ret_html():
    """获取HTML元素"""
    res = requests.get('https://www.crummy.com/software/BeautifulSoup/', timeout=3)
    return res.text
if __name__ == '__main__':
    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    print(soup)

其中需要注意的就是模块导入代码,以及实例化 soup 对象时,在 BeautifulSoup 类的构造函数中传递的两个参数,一个是待解析的字符串,另一个是解析器,官方建议的是 lxml,因其解析速度快。

上述代码输出的内容如下所示,看上去就是普通的 HTML 代码文件。

而且我们可以调用 soup 对象的 soup.prettify() 方法,可以将 HTML 标签进行格式化操作,这样你就可以在存储到外部文件的时候,让其 HTML 代码进行美观。

BeautifulSoup 模块的对象说明

BeautifulSoup 类可以将 HTML 文本解析成 Python 对象树,而这里面又包括最重要的四种对象,分别是 TagNavigableStringBeautifulSoupComment 对象,接下来我们一一介绍。

BeautifulSoup 对象

该对象本身就代表整个 HTML 页面,而且实例化该对象的时候,还会自动补齐 HTML 代码。

    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    print(type(soup))

Tag 对象

Tag 是标签的意思,Tag 对象就是网页标签,或者叫做网页元素对象,例如获取 bs4 官网的 h1 标签对象,代码如下所示:

if __name__ == '__main__':
    html_str = ret_html()
    soup = BeautifulSoup(html_str, 'lxml')
    # print(soup.prettify())  # 格式化 HTML
    print(soup.h1)

得到的也是网页中的 h1 标签:

<h1>Beautiful Soup</h1>

用 Python 中的 type 函数,可以查看其类型,代码如下:

    print(soup.h1)
    print(type(soup.h1))

此时得到的可不是一个字符串,而是一个 Tag 对象。

<h1>Beautiful Soup</h1>
<class 'bs4.element.Tag'>

既然是 Tag 对象,那就会具备一些特定的属性值

获取标签名称

    print(soup.h1)
    print(type(soup.h1))
    print(soup.h1.name)  # 获取标签名称

通过 Tag 对象获取标签的属性值

 print(soup.img)  # 获取网页第一个 img 标签
 print(soup.img['src'])  # 获取网页元素DOM的属性值

通过 attrs 属性获取标签的所有属性

print(soup.img)  # 获取网页第一个 img 标签
print(soup.img.attrs)  # 获取网页元素的所有属性值,以字典形式返回

以上代码的所有输出如下所示,可以任意选择标签进行练习。

<h1>Beautiful Soup</h1>
<class 'bs4.element.Tag'>
h1
<img align="right" src="10.1.jpg" width="250"/>
{'align': 'right', 'src': '10.1.jpg', 'width': '250'}

NavigableString 对象

NavigableString 对象获取的是标签内部的文字内容,例如p标签,在下述代码中提取的是我是橡皮擦

<p>我是橡皮擦</p>

获取该对象也非常容易,使用 Tag 对象的 string 属性即可。

    nav_obj = soup.h1.string
    print(type(nav_obj))

输出结果如下所示:

<class 'bs4.element.NavigableString'>

如果目标标签是一个单标签,会获取到 None 数据

除了使用对象的string方法外,还可以使用text属性和get_text()方法来获取标签内容

    print(soup.h1.text)
    print(soup.p.get_text())
    print(soup.p.get_text('&'))

其中 text是获取所有子标签内容的合并字符串,而get_text()也是相同的效果,不过使用get_text()可以增加一个分隔符,例如上述代码的&符号,还可以使用,strip=True 参数去除空格。

Comment 对象

BeautifulSoup 对象和 Tag 对象支持标签查找方法,具体内容如下所示。

find() 方法和 find_all() 方法

调用 BeautifulSoup 对象和 Tag 对象的find()方法,可以在网页中找到指定对象,

该方法的语法格式如下:

obj.find(name,attrs,recursive,text,**kws)

方法的返回结果是查找到的第一个元素,如果没查询到,返回 None。 参数说明如下:

  • name:标签名称;
  • attrs:标签属性;
  • recursive:默认搜索所有后代元素;
  • text:标签内容。

例如我们继续在上文请求的网页中,查找a标签,代码如下:

html_str = ret_html()
soup = BeautifulSoup(html_str, 'lxml')
print(soup.find('a'))

也可以使用attrs参数进行查找,代码如下:

html_str = ret_html()
soup = BeautifulSoup(html_str, 'lxml')
# print(soup.find('a'))
print(soup.find(attrs={'class': 'cta'}))

find()方法还提供了一些特殊的参数,便于直接查找,例如可以使用id=xxx,查找属性中包含 id的标签,可以使用class_=xxx,查找属性中包含class的标签。

print(soup.find(class_='cta'))

find()方法成对出现的是find_all()方法,看名称就能知道其返回结果收是全部匹配标签,语法格式如下:

obj.find_all(name,attrs,recursive,text,limit)

其中重点说明一下limit参数,它表示最多返回的匹配数量,find()方法可以看作limit=1,这样就变得容易理解了。

到此这篇关于Python爬虫网页元素定位术的文章就介绍到这了,更多相关Python元素定位内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中3种等待元素出现的方法总结

    目录 前言 一.强制等待 二.隐性等待 三.显性等待 总结 前言 在做web或app的自动化测试经过会出现找不到元素而报错的情况,很多时候是因为元素 还没有被加载出来,查找的代码就已经被执行了,自然就找不到元素了.那么我可以用等待 元素加载完成后再执行查找元素的code. Python里有三种等待的方式: 一.强制等待 Sleep(54) 这个方法在time模块,使用时通过from time import sleep导入 比如: Sleep(10) #表示强行等待10s再执行下一句代码 Driv

  • 4种方法python批量修改替换列表中元素

    在日常开发中,我们可能会遇到批量修改列表元素的需求.可以使用列表推导式来快速的实现,在这里做了一些技术总结可供参考. 一,修改单个词语(不建议): aaa=['黑色','红色','白色','黑色'] aaa=str(aaa) bbb=aaa.replace("黑色","黄色") bbb 结果: "['黄色', '红色', '白色', '黄色']" 二,修改单个词语 lists = ['神奇', '建投', '证券', '有限公司', '今天',

  • Python list列表删除元素的4种方法

    目录 del:根据索引值删除元素 pop():根据索引值删除元素 remove():根据元素值进行删除 clear():删除列表所有元素 在 Python 列表中删除元素主要分为以下 3 种场景: 根据目标元素所在位置的索引进行删除,可以使用 del 关键字或者 pop() 方法: 根据元素本身的值进行删除,可使用列表(list类型)提供的 remove() 方法: 将列表中所有元素全部删除,可使用列表(list类型)提供的 clear() 方法. del:根据索引值删除元素 del 是 Pyt

  • python添加列表元素append(),extend()及 insert()

    目录 一.使用+号添加列表元素 二.使用append()方法添加列表元素 1.添加单个元素 2.添加对象 3.添加另一个列表 三.extend()方法添加元素 四.insert()方法添加元素 一.使用+号添加列表元素 一般情况下两个列表合并起来也是一种添加元素的方法,只要使用+号直接进行运算就可以了,下面是演示代码. name1 = ['python', 'java', 'php', 'MySql']   name2 = ['C++', 'C', 'C#']   total = name1 +

  • Python统计序列和文件中元素的频度

    目录 1.如何统计序列中元素的出现频度 2.代码演示 1.如何统计序列中元素的出现频度 实际案例: (1)某随机序列[12, 5, 6, 4, 6, 5, 5, 7, ...] 中找到出现次数最高的3个元素,它们出现次数是多少? (2)对某英文文章的单词,进行词频统计,找到出现次数最高的10个单词,它们出现次数是多少? 解决方案: 使用collections.Counter对象 将序列传入Counter的构造器,得到Counter对象是元素频度的字典. Counter.most_common(n

  • Python读取本地文件并解析网页元素的方法

    如下所示: from bs4 import BeautifulSoup path = './web/new_index.html' with open(path, 'r') as f: Soup = BeautifulSoup(f.read(), 'lxml') titles = Soup.select('ul > li > div.article-info > h3 > a') for title in titles: print(title.text) 输出: Sardinia

  • python删除列表元素del,pop(),remove()及clear()

    目录 一.del删除列表 二.pop()方法删除列表元素 三.remove()方法删除列表元素 四.clear()删除列表元素 前言: 列表元素能增加就可以删除,前面我们介绍几种增加元素的方法,虽然都是增加但是也有所不同,这里介绍的删除列表元素的方法也是一样,下面就来演示一下. 一.del删除列表 del 不是方法,是 Python 中的关键字,专门用来执行删除操作,它不仅可以删除整个列表,还可以删除列表中的某些元素.不仅可以删除单个元素,还能删除元素段.而且del是直接从内存中删除列表或列表元

  • Python字典删除键值对和元素的四种方法(小结)

    目录 1.del删除字典本身 2.pop()删除字典键值对  3.popitem()删除字典键值对 4.clear()删除字典键值对:清空字典中的所有内容,但是不删除字典本身,del删除字典本身 在删除每个字典的时候有些方法和删除其他拥有独立内存的数据使用的方法是一样的,比如del,直接清空内存,clear()是值清除变量值.字典的删除我们从字典对象本身和字典中的键值对两个方面出发,来学习一下. 1.del删除字典本身 del就是从内存级别删除字典本身,让这个字典对象彻底消失.同时也可以删除字典

  • Python爬虫网页元素定位术

    目录 实战场景 基础用法如下所示 BeautifulSoup 模块的对象说明 BeautifulSoup 对象 Tag 对象 NavigableString 对象 Comment 对象 find() 方法和 find_all() 方法 实战场景 初学 Python 爬虫,十之八九大家采集的目标是网页,因此快速定位到网页内容,就成为我们面临的第一道障碍,本篇博客就为你详细说明最易上手的网页元素定位术,学完就会系列. 本文核心使用到的是 Beautiful Soup 模块,因此我们用来做测试采集的站

  • python 爬虫网页登陆的简单实现

    相信各位在写 python 爬虫的时候会在爬取网站时遇到一些登陆的问题,比如说登陆时遇到输入验证码比如说登录时遇到图片拖拽等验证,如何解决这类问题呢?一般有两种方案. 使用 cookie 登陆 我们可以通过使用 cookies 登陆,首先获取浏览器的 cookie,然后利用 requests 库直接登陆 cookie,服务器就会认为你是一个真实登陆用户,所以就会返回给你一个已登陆的状态,这个方法是很好用的,基本上绝大部分的需要验证码登录的网站都可以通过 cookie 登录来解决, #! -*-

  • python playwright之元素定位示例详解

    目录 定位篇 定位的详细介绍 文本选择器定位 CSS 选择器定位 布局定位结合 CSS,也是我最喜欢的 根据元素可用 继续说说属性 定位篇 UI 自动化很多时候的苦恼都是定位不到,其实说实话我到现在有时候也是莫名其妙的定位到或者定位不到.好在这个框架定位方式的上限非常以及特别的高,这就像人有钱和没钱的区别主要在于选择权一样,有选择的人生才是幸福的.出门想开法拉利就开法拉利,想开拖拉机就开拖拉机. 定位的详细介绍 1.官方是不推荐 xpath 和 css 的,原话意思是 CSS 和 XPATH 是

  • Python爬虫Xpath定位数据的两种方法

    方法一:直接右键,将文章路径复制下来点击Copy full Xpath 使用selenium+lxml中的etree进行配合使用,使用etree解析html网页 import requests from lxml import etree import time import socket import csv from selenium import webdriver from configparser import ConfigParser from selenium.webdriver

  • Python爬虫实现网页信息抓取功能示例【URL与正则模块】

    本文实例讲述了Python爬虫实现网页信息抓取功能.分享给大家供大家参考,具体如下: 首先实现关于网页解析.读取等操作我们要用到以下几个模块 import urllib import urllib2 import re 我们可以尝试一下用readline方法读某个网站,比如说百度 def test(): f=urllib.urlopen('http://www.baidu.com') while True: firstLine=f.readline() print firstLine 下面我们说

  • python爬虫实战之最简单的网页爬虫教程

    前言 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.最近对python爬虫有了强烈地兴趣,在此分享自己的学习路径,欢迎大家提出建议.我们相互交流,共同进步.话不多说了,来一起看看详细的介绍: 1.开发工具 笔者使用的工具是sublime text3,它的短小精悍(可能男人们都不喜欢这个词)使我十分着迷.推荐大家使用,当然如果你的电脑配置不错,pycharm可能更加适合你. sublime text3

  • Python构建网页爬虫原理分析

    既然本篇文章说到的是Python构建网页爬虫原理分析,那么小编先给大家看一下Python中关于爬虫的精选文章: python实现简单爬虫功能的示例 python爬虫实战之最简单的网页爬虫教程 网络爬虫是当今最常用的系统之一.最流行的例子是 Google 使用爬虫从所有网站收集信息.除了搜索引擎之外,新闻网站还需要爬虫来聚合数据源.看来,只要你想聚合大量的信息,你可以考虑使用爬虫. 建立一个网络爬虫有很多因素,特别是当你想扩展系统时.这就是为什么这已经成为最流行的系统设计面试问题之一.在这篇文章中

  • Python爬虫解析网页的4种方式实例及原理解析

    这篇文章主要介绍了Python爬虫解析网页的4种方式实例及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用Python写爬虫工具在现在是一种司空见惯的事情,每个人都希望能够写一段程序去互联网上扒一点资料下来,用于数据分析或者干点别的事情.​ 我们知道,爬虫的原理无非是把目标网址的内容下载下来存储到内存中,这个时候它的内容其实是一堆HTML,然后再对这些HTML内容进行解析,按照自己的想法提取出想要的数据,所以今天我们主要来讲四种在Py

  • Python爬虫之Selenium设置元素等待的方法

    一.显式等待 WebDriverWait类是由WebDirver 提供的等待方法.在设置时间内,默认每隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常(TimeoutException) from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from seleniu

  • python爬虫lxml库解析xpath网页过程示例

    目录 前言 (一)xpath是什么 (二)xpath的基本语法 路径查询. (三) lxml库 (四)lxml库的使用 导入lxml.etree (五)实例演示 前言 在我们抓取网页内容的时候,通常是抓取一整个页面的内容,而我们仅仅只是需要该网页中的部分内容,那该如何去提取呢?本章就带你学习xpath插件的使用.去对网页的内容进行提取. (一)xpath是什么 xpath是一门在XML文档中查找信息的语言,xpath可用来在XML 文档中对元素和属性进行遍历,主流的浏览器都支持xpath,因为h

随机推荐