Python:如何使用BeautifulSoup的selecter?

网络爬虫中,BeautifulSoup是一个非常有用的库,可以帮助你获取HTML内容,并帮你精准定位想要的元素。

使用方法如下:

from bs4 import BeautifulSoup
import requests

# 假设这是我们要解析的网页URL
url = 'http://example.com'

# 使用requests库获取网页内容
response = requests.get(url)
content = response.content #或者.text

# 使用BeautifulSoup和lxml解析器解析HTML内容
soup = BeautifulSoup(content, 'lxml')

# 查找所有的<a>标签
links = soup.find_all('a')

# 打印每个链接的href属性
for link in links:
    print(link.get('href'))
Python

select 方法的基本语法:

soup.select("selector")
Python

常用的CSS选择器:

  1. 元素选择器
    • 例如:soup.select('p') 会选择所有的<p>(段落)元素。
  2. 类选择器
    • 使用点.表示。例如:soup.select('.myclass') 会选择所有具有class="myclass"的元素。
  3. ID选择器
    • 使用井号#表示。例如:soup.select('#myid') 会选择具有id="myid"的元素。
  4. 属性选择器
    • 使用方括号[]。例如:soup.select('a[href]') 会选择所有带有href属性的<a>标签。
  5. 后代选择器
    • 使用空格分隔。例如:soup.select('div span') 会选择所有位于<div>标签内部的<span>标签。
  6. 子元素选择器
    • 使用>。例如:soup.select('ul > li') 会选择所有直接位于<ul>标签下的<li>标签。
  7. 组合选择器
    • 使用逗号,分隔。例如:soup.select('div.myclass, span.otherclass') 会选择所有class="myclass"<div>标签和class="otherclass"<span>标签。

例子分析:

dom = BS(content, features="lxml")
dom.select('table tr table tr.athing')):
Python

在CSS选择器语法中,table tr table tr.athing 代表了一系列嵌套规则,用于选择HTML元素。让我们分解这个选择器:

  1. table
    • 这代表选择所有的<table>元素。
  2. table tr
    • 这里的空格是一个后代选择器。它意味着选择所有位于<table>元素内部的<tr>元素(即表格的行)。
  3. 再次的 table tr
    • 这一部分再次应用同样的规则,表示选择位于<tr>元素内部的另一个<table>元素的所有<tr>行。这表明我们正在处理嵌套的表格结构。
  4. .athing
    • 这是一个类选择器,表示选择具有类名athing的元素。

将这些组合起来,table tr table tr.athing 的意思是:在一个<table>内部的<tr>元素内部,找到另一个<table>,然后在这个内部<table>中找到所有具有类名athing<tr>行。这通常用于处理复杂且嵌套的表格结构,在数据抓取和网页分析时特别有用。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注