网络爬虫CSS选择器详细讲解

网络爬虫CSS选择器详细讲解

  • 前言
  • 使用步骤
    • 1.解析的HTML代码
    • 2.逐层选择节点
    • 3.获取文本(string和get_text())
    • 4.获取节点的属性值
    • 5.选择单个和多个节点
    • 6.通过class和id选择节点(.class #id):
    • 7.选择属性值有多个值的节点(:
    • 8.选择指定的多个节点:
    • 9.选择包含属性的节点:
    • 10.根据属性值选择节点:
    • 11.嵌套选择:
  • 更多关于CSS选择器用法请参照该链接:
    • https://www.w3school.com.cn/cssref/css_selectors.asp
  • 网络爬虫速查表(多种选择器语法、request常用语法速查表下载):[https://blog.csdn.net/qq_20163065/article/details/123338900?spm=1001.2014.3001.5501](https://blog.csdn.net/qq_20163065/article/details/123338900?spm=1001.2014.3001.5501)


前言

Python拥有大量的解析库,比较常用的有Beautiful Soup、pyquery、parsel等,而它们共同特点是:大部分都支持CSS选择器,所以学会了CSS选择器的用法,就能快速利用各种解析方式提取数据,下面将介绍基于bs4解析库的CSS的常用方法。


使用步骤

1.解析的HTML代码

代码如下(示例):

html =
"""
<html>
<head>
    <title>フィロソフィー</title>
</head>
<body>
    <p class="philosophy">
        <a href="https://blog.csdn.net/qq_20163065?type=blog" class='marx' id="1">フィロソフィー的个人博客</a>
    </p>
    <p class="C-1 C-2">多个class值的节点</p>
    <p class="C-1">通过.class选择节点</p>
    <p class="p-1"></p>
    <p class="p-2" value="marx"></p>
    <h1><a id="D1">通过#id选择节点</a></h1>
</body>
</html>
"""
from bs4 import BeautifulSoup  #导入bs4库
soup = BeautifulSoup(html,features='lxml') #选择lxml解析器

2.逐层选择节点

逐层获取的节点:

print(soup.select('html head title')) #打印逐层获取的title节点
print(soup.select('.philosophy a'))   

输出:

[フィロソフィー]
[フィロソフィー的个人博客]

3.获取文本(string和get_text())

打印节点内的文本(两种方式):

print(soup.select('html head title')[0].string) #返回节点文本内容
print(soup.select('.philosophy a')[0].get_text()) #返回节点文本内容

输出:

フィロソフィー
フィロソフィー的个人博客

4.获取节点的属性值

print(soup.select('p')[0]['class'])  #获取第一个p节点的class属性值
print(soup.select('p a')[0]['href']) #获取第一个p节点下的a节点的href属性值

输出:

['philosophy']
https://blog.csdn.net/qq_20163065?type=blog

5.选择单个和多个节点

print(soup.select('p')) #选择所有的p节点,返回多个p节点的列表
print(soup.select('p')[1:])    #选择第二个p节点及后面的p节点
print(soup.select('p')[4])  #使用索引选择第五个p节点,返回单个节点

输出:

[

フィロソフィー的个人博客

,

多个属性值的节点

,

通过.class选择节点

,

,

] [

多个属性值的节点

,

通过.class选择节点

,

,

]

6.通过class和id选择节点(.class #id):

通过class属性和id属性选择:

print(soup.select('.C-1'))   #选择class="C-1"节点
print(soup.select('h1 #D1')) #选择h1节点下的id="D1"的节点

输出:

[

多个属性值的节点

,

通过.class选择节点

] [通过#id选择节点]

7.选择属性值有多个值的节点(:

选择class属性值为C-1和C-2的节点:

print(soup.select('.C-1.C-2'))

输出:

[

多个class值的节点

]

8.选择指定的多个节点:

选择class="p-1"的节点和class="p-2"的节点:

print(soup.select('.p-1,.p-2')) #返回包含指定的两个节点的列表

输出:

[

,

]

9.选择包含属性的节点:

选择class=“philosopy“的节点下 包含href属性的节点

soup.select('.philosophy a[href]')

输出:

[フィロソフィー的个人博客]

10.根据属性值选择节点:

选择value=“marx”的 节点

soup.select('p[value="marx"]')

输出:

[

]

11.嵌套选择:

select支持嵌套选择节点

for p in soup.select('p'):
    print(p.select('a'))

输出:

[フィロソフィー的个人博客]
[]
[]
[]
[]

更多关于CSS选择器用法请参照该链接:

https://www.w3school.com.cn/cssref/css_selectors.asp

网络爬虫速查表(多种选择器语法、request常用语法速查表下载):https://blog.csdn.net/qq_20163065/article/details/123338900?spm=1001.2014.3001.5501

你可能感兴趣的:(爬虫,选择器,python,爬虫,css)