BeautifulSoup的CSS选择器技巧及其在Web爬虫中的应用

2023-04-17 00:00:00 爬虫 技巧 选择器

BeautifulSoup(简称BS)是用Python语言编写的一个库,主要用于从HTML或XML文档中提取数据。BS的优点之一是它可以使用CSS选择器来查找特定元素。本文将介绍一些BS的CSS选择器技巧及其在Web爬虫中的应用。

  1. 使用标签名称

使用标签名称可以匹配所有具有该标签的元素。例如,要匹配HTML文档中的所有段落元素:

from bs4 import BeautifulSoup

html = '<p>pidancode.com</p><p>皮蛋编程</p>'

soup = BeautifulSoup(html, 'html.parser')
p_tags = soup.select('p')
print(p_tags)

输出结果:

[<p>pidancode.com</p>, <p>皮蛋编程</p>]
  1. 使用类名

使用CSS类选择器(以点号"."开头)可以匹配所有具有指定类的元素。例如,要匹配所有class为"foo"的元素:

from bs4 import BeautifulSoup

html = '<p class="foo">pidancode.com</p><p class="foo">皮蛋编程</p><p class="bar">Hello world</p>'

soup = BeautifulSoup(html, 'html.parser')
foo_tags = soup.select('.foo')
print(foo_tags)

输出结果:

[<p class="foo">pidancode.com</p>, <p class="foo">皮蛋编程</p>]
  1. 使用ID

使用CSS ID选择器(以井号"#"开头)可以匹配具有指定ID的元素。例如,要匹配ID为"content"的元素:

from bs4 import BeautifulSoup

html = '<div id="content"><h1>Title</h1><p>pidancode.com</p></div>'

soup = BeautifulSoup(html, 'html.parser')
content_tag = soup.select('#content')
print(content_tag)

输出结果:

[<div id="content"><h1>Title</h1><p>pidancode.com</p></div>]
  1. 使用属性

使用CSS属性选择器(用中括号"[]"包围)可以匹配具有指定属性的元素。例如,要匹配所有href属性为"http://www.pidancode.com"的链接:

from bs4 import BeautifulSoup

html = '<a href="http://www.pidancode.com">pidancode.com</a><a href="http://www.pdpython.com">皮蛋Python</a>'

soup = BeautifulSoup(html, 'html.parser')
links = soup.select('a[href="http://www.pidancode.com"]')
print(links)

输出结果:

[<a href="http://www.pidancode.com">pidancode.com</a>]
  1. 结合使用

可以使用多个选择器来匹配复杂的结构。例如,要匹配class为"item"且包含"data"的div元素:

from bs4 import BeautifulSoup

html = '''
<div class="item">
    <h3 class="title">Title 1</h3>
    <p class="data">pidancode.com</p>
</div>
<div class="item">
    <h3 class="title">Title 2</h3>
    <p>皮蛋编程</p>
</div>
'''

soup = BeautifulSoup(html, 'html.parser')
divs = soup.select('div.item p.data')
print(divs)

输出结果:

[<p class="data">pidancode.com</p>]

以上是一些常见的BS的CSS选择器技巧及其在Web爬虫中的应用。通过结合使用这些选择器,可以方便地提取出你想要的数据。

相关文章