Python:如何使用BeautifulSoup的selecter?

2023-11-14

网络爬虫中,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'))

select 方法的基本语法:

soup.select("selector")

常用的CSS选择器:

  1. 元素选择器: 例如:soup.select('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')):

在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行。这通常用于处理复杂且嵌套的表格结构,在数据抓取和网页分析时特别有用。