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'))
Pythonselect
方法的基本语法:
soup.select("selector")
Python常用的CSS选择器:
- 元素选择器:
- 例如:
soup.select('p')
会选择所有的<p>
(段落)元素。
- 例如:
- 类选择器:
- 使用点
.
表示。例如:soup.select('.myclass')
会选择所有具有class="myclass"
的元素。
- 使用点
- ID选择器:
- 使用井号
#
表示。例如:soup.select('#myid')
会选择具有id="myid"
的元素。
- 使用井号
- 属性选择器:
- 使用方括号
[]
。例如:soup.select('a[href]')
会选择所有带有href
属性的<a>
标签。
- 使用方括号
- 后代选择器:
- 使用空格分隔。例如:
soup.select('div span')
会选择所有位于<div>
标签内部的<span>
标签。
- 使用空格分隔。例如:
- 子元素选择器:
- 使用
>
。例如:soup.select('ul > li')
会选择所有直接位于<ul>
标签下的<li>
标签。
- 使用
- 组合选择器:
- 使用逗号
,
分隔。例如: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元素。让我们分解这个选择器:
table
:- 这代表选择所有的
<table>
元素。
- 这代表选择所有的
table tr
:- 这里的空格是一个后代选择器。它意味着选择所有位于
<table>
元素内部的<tr>
元素(即表格的行)。
- 这里的空格是一个后代选择器。它意味着选择所有位于
- 再次的
table tr
:- 这一部分再次应用同样的规则,表示选择位于
<tr>
元素内部的另一个<table>
元素的所有<tr>
行。这表明我们正在处理嵌套的表格结构。
- 这一部分再次应用同样的规则,表示选择位于
.athing
:- 这是一个类选择器,表示选择具有类名
athing
的元素。
- 这是一个类选择器,表示选择具有类名
将这些组合起来,table tr table tr.athing
的意思是:在一个<table>
内部的<tr>
元素内部,找到另一个<table>
,然后在这个内部<table>
中找到所有具有类名athing
的<tr>
行。这通常用于处理复杂且嵌套的表格结构,在数据抓取和网页分析时特别有用。