Python BeautifulSoup Web数据挖掘技巧

2023-04-17 00:00:00 python 技巧 数据挖掘
  1. 查找标签

使用BeautifulSoup的find()或find_all()方法可以查找标签。其中find()只返回第一个匹配的标签,而find_all()返回所有匹配的标签。

举个例子,要查找pidancode.com页面上所有的a标签,可以这样写代码:

from bs4 import BeautifulSoup
import requests

url = 'https://pidancode.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
a_tags = soup.find_all('a')
  1. 获取属性值

获取一个标签的属性值,可以使用tag[attr]的方式。其中tag是标签对象,attr是属性名。

举个例子,获取pidancode.com页面上第一个a标签的href属性值,可以这样写代码:

from bs4 import BeautifulSoup
import requests

url = 'https://pidancode.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
a_tags = soup.find_all('a')
first_a_tag = a_tags[0]
href = first_a_tag['href']
  1. 查找子孙标签

有时候需要查找一个标签的子孙标签,可以使用tag.find_all()方法。

举个例子,要查找pidancode.com页面上class为post-title的h2标签,可以这样写代码:

from bs4 import BeautifulSoup
import requests

url = 'https://pidancode.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
post_title_tags = soup.find_all('h2', class_='post-title')
  1. 查找父标签

有时候需要查找一个标签的父标签,可以使用tag.parent属性。

举个例子,要查找pidancode.com页面上class为entry-summary的div标签的父标签,可以这样写代码:

from bs4 import BeautifulSoup
import requests

url = 'https://pidancode.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
entry_summary_tags = soup.find_all('div', class_='entry-summary')
for entry_summary_tag in entry_summary_tags:
    parent_tag = entry_summary_tag.parent
    print(parent_tag)
  1. 过滤标签

可以使用filter()函数过滤标签。filter()函数接受一个函数作为参数,然后将文档中的每一个标签传给该函数,函数返回True的标签将被保留,否则将被删除。

举个例子,过滤pidancode.com页面上class为post-title的h2标签,可以这样写代码:

from bs4 import BeautifulSoup
import requests

url = 'https://pidancode.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

def has_post_title_class(tag):
    return tag.name == 'h2' and tag.has_attr('class') and 'post-title' in tag['class']

filtered_tags = filter(has_post_title_class, soup.find_all())
  1. 正则表达式匹配

如果需要对文档进行复杂的正则表达式匹配,则可以使用re模块配合BeautifulSoup使用。

举个例子,在pidancode.com页面上查找所有以数字开头的链接,可以这样写代码:

from bs4 import BeautifulSoup
import requests
import re

url = 'https://pidancode.com/'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
a_tags = soup.find_all('a', href=re.compile(r'^\d+.*$'))

以上就是Python BeautifulSoup Web数据挖掘技巧的详细介绍,希望对您有所帮助。

相关文章