python - 如何刮取具有相同模式的不同类名
问题描述
我正在尝试从网页中抓取数据。然而,类名并不完全相同,但它遵循类似的模式。类名如下
视图行视图行 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)
请帮我解决问题。
解决方案
通过正则表达式过滤类值:
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)
推荐阅读
- ontology - owl api state ObjectProperty 个人之间的关系来自进口
- html - 从 html 表单向 jsp 提交“null”
- node.js - |节点.JS| 每当我得到 params.id 时,我就会得到 jumbotron.css
- java - 在 Eclipse 中对 Java 9 模块化项目进行 JUnit 测试
- ldap - CAS 5.2.4 cas.properties 位置
- c# - 为什么 C# 在 XDocument 中留下未闭合的标签?
- pycharm - graphlab.SFrame.show() 错误:请求的端口不可用:无
- python - PyQt5 启动具有实时输出的外部进程
- c - 我怎样才能正确减去?
- php - 为两个相似的数据库创建不同的会话