首页 > 解决方案 > 如何刮取具有相同模式的不同类名

问题描述

我正在尝试从网页中抓取数据。然而,类名并不完全相同,但它遵循类似的模式。类名如下

视图行视图行 1 视图行奇数 clearfix

视图行视图行 2 视图行甚至 clearfix

视图行视图行 3 视图行奇数 clearfix

我尝试了下面的代码,但没有运气!可能是我使用的语法错误。

from bs4 import BeautifulSoup
import requests
source = requests.get('http://news.mit.edu/topic/artificial-intelligence2').text
soup = BeautifulSoup(source, 'lxml')
match = soup.find_all('li', class_='views-row views-row-* views-row-* clearfix')
print(match)

请帮我解决问题。

标签: pythonbeautifulsoup

解决方案


通过正则表达式过滤类值:

from bs4 import BeautifulSoup
import requests

source = requests.get('http://news.mit.edu/topic/artificial-intelligence2').content
soup = BeautifulSoup(source, 'html.parser')

li_tags = soup.find_all('li', class_= re.compile(r'views-row views-row-[0-9]+ views-row-(odd|even) clearfix'))
print(li_tags)

对于更简化的搜索,您可以soup.select使用 css 选择器应用:

li_tags = soup.select('li[class*=views-row-]')
print(li_tags)

推荐阅读