如何在 BeautifulSoup 中使用其样式定义(如填充、字体大小等)对元素进行 Web 抓取

Posted

技术标签:

【中文标题】如何在 BeautifulSoup 中使用其样式定义(如填充、字体大小等)对元素进行 Web 抓取【英文标题】:How do I web scrape an element using its style definitions like padding, font-size etc. in BeautifulSoup 【发布时间】:2020-04-15 02:59:27 【问题描述】:

我想使用其样式属性padding-left: 16px 提取一个 div,类似于以下 Python 代码所示。但显然它不起作用。我知道如何使用它的类、id 或标签来提取元素。有没有办法使用样式属性做同样的事情?

from bs4 import BeautifulSoup

f = open("C:\Users\admin\Documents\GitHub\RedditCrawler\new.html");
soup = BeautifulSoup(f);
f.close();

hr2 = soup.find('div', style="padding-left":"16px");

print(hr2);

以下是我试图从我的 html 文件中提取的 div:

<html>
<div style="padding-left:16px;">This is the deal</div>
</html>

【问题讨论】:

其中一个应该可以工作***.com/a/23584775/1289093***.com/a/35140202/1289093 @yolabingo 感谢您的快速回复。第一个链接对我有用。奇怪的是,即使我已经在这里搜索了很长时间,我也找不到已经回答过的类似问题。 【参考方案1】:

使用 CSS 选择器获取 div 元素。

soup.select_one('div[style="padding-left:16px;"]')

代码

from bs4 import BeautifulSoup
html='''<html>
<div style="padding-left:16px;">This is the deal</div>
</html>'''
soup=BeautifulSoup(html,'html.parser')
#To get the element
print(soup.select_one('div[style="padding-left:16px;"]'))
#To get the text
print(soup.select_one('div[style="padding-left:16px;"]').text)
#To get the style value
print(soup.select_one('div[style="padding-left:16px;"]')['style'])

输出

<div style="padding-left:16px;">This is the deal</div>
This is the deal
padding-left:16px;

【讨论】:

以上是关于如何在 BeautifulSoup 中使用其样式定义(如填充、字体大小等)对元素进行 Web 抓取的主要内容,如果未能解决你的问题,请参考以下文章

使用 BeautifulSoup 删除所有内联样式

BeautifulSoup获取指定class样式的div

在 iOS 中指定默认通知样式

使用 BeautifulSoup 查找具有两种特定样式的标签

如何在 ASP.NET 用户控件中指定 *.css 文件?

如何使用python和beautifulsoup4循环抓取网站中多个页面的数据