BeautifulSoup获取指定class样式的div

更详细的,参考链接  beautifulsoup菜鸟教程 :

http://www.jsphp.net/python/show-24-214-1.html

 

想获取<div class='xxx'> ...<div>这样的div标签,通常有三种办法,

1)用字符串查找方法,然后切分字符串(或切片操作),如str.index(patternStr)或str.find(patternStr),这种方法快,但步骤多,因为要去头去尾。

2)用正则表达式,比如'<div class="result_info">([\s\S]+?)</div>',通过正则表达式的括号,可以获取匹配的内容,即<div ..></div>之间的内容:

复制代码

import re

def getTags(html):
    reg = r'<div class="result_info">([\s\S]+?)</div>'
    pattern= re.compile(reg)
    tags= re.findall(pattern, html)
    return tags

复制代码

不过正则表达式仍有缺点,例如'<div class="result_info">([\s\S]+?)</div>'括号中的问号表示非贪婪匹配,正常情况下可以匹配到所需要的内容,但如果class="result_info"的div中还嵌套了子的div,那么正则表达式的后半部分"</div>"将会匹配子div的结尾部分</div>,而不是希望的父div.

假如有这样一个html:

复制代码

  <div class="result_info">
     <p>some paragraph test 1
     </p>
     <p>some paragraph test 2
     </p>
     <div id="div_sub" class="sub_div_style">
        some contents in sub div
     </div>
     backend content here
  </div>

复制代码

那么backend contents here这段内容将会匹配不到,正则表达式将会将id为div_sub的</div>作为结尾。

3)使用第三方库,比如BeautifulSoup,优点是准确,缺点是速度会比字符串切分、正则表达式慢,下面说说BeautifulSoup的用法。

按照BeautifulSoup官方文档的说明怎么都不能成功,后来在百度知道(http://zhidao.baidu.com/question/433247968620775644.html)找到答案,真是扯淡,附上有效代码:

soup=BeautifulSoup(html)
print soup.find_all(name='div',attrs={"class":"footer"})#按照字典的形式给attrs参数赋值

完整的:

复制代码

from bs4 import BeautifulSoup
import urllib2

def getTargetDiv(url,myAttrs):
    html=urllib2.urlopen(url).read()
    soup=BeautifulSoup(html)
    return soup.find_all(name='div',attrs=myAttrs)

if __name__=="__main__":
    url=r'http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/'
    myAttrs={'class':'footer'}
    print getTargetDiv(url, myAttrs)

复制代码

按照官方文档(http://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/)的做法:

#1.soup.find_all("a", class_="sister")
#2.css_soup.find_all("p", class_="body")
#3.soup.find_all(href=re.compile("elsie"))

改成

soup.find_all(name='div',class_=re.compile('info_item'))
或者
soup.find_all('div',class_='info_item')

都没有匹配结果,经测试需要soup.find_all(name='div',attrs={"class":"footer"})这样以字典的形式给attrs参数赋值才可以。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用CSS可以通过选择器(selector)来替代BeautifulSoup中的class的用法。选择器可以是HTML元素的id、class、属性或者是元素的内容,你可以使用这些选择器来精确地定位到文档中的元素。 ### 回答2: 在BeautifulSoup中,class属性通常用于选择HTML元素并进行处理。与此相对,CSS是一种用于样式化和设计网页的强大语言。虽然CSS主要用于样式化,但也可以用来选择和操作HTML元素。 要使用CSS来替代BeautifulSoupclass的用法,可以按照以下步骤进行: 1. 使用CSS选择器来选择特定的HTML元素。可以通过元素类型(如div、p、span)、ID、类别和其他属性来选择元素。例如,要选择class为"example"的元素,可以使用CSS选择器".example"。 2. 使用CSS属性来操作选定的HTML元素。可以使用CSS属性来修改元素的样式、内容或其他属性。例如,使用CSS属性"color"来改变选定元素的文本颜色。 3. 在HTML文档中通过内联样式或外部样式表将CSS应用于选定的元素。可以通过直接在HTML元素中添加内联样式,或者通过在<head>标签中添加<style>标签来引用外部样式表。 举例来说,如果要选取class为"example"的所有元素,并将它们的文本颜色改为红色,可以使用以下CSS代码: .example { color: red; } 然后,将这段CSS代码应用于HTML文档中的相关元素即可。 总而言之,可以使用CSS选择器和属性来代替BeautifulSoup中的class属性的用法。通过灵活利用CSS,可以选择和操作HTML元素,实现类似的功能和效果。 ### 回答3: 在使用CSS替代BeautifulSoup中的class时,可以通过以下几个步骤实现: 1. 了解HTML结构:首先需要对HTML文档的结构有一定的了解,包括标签的层次结构以及相关class的命名。 2. 使用选择器:通过CSS的选择器定位到目标元素。例如,要选取所有class为"example"的元素,可使用".example"选择器。 3. 应用样式:在CSS中,可以通过属性和值来为选中的元素应用样式。可以设置元素的背景、颜色、字体等相关样式。 4. 使用层叠样式表:如果需要将CSS样式应用于多个页面,可以将CSS样式编写在单独的样式表文件中,并在HTML文档中引入该样式表。 5. 使用伪类和伪元素:通过使用CSS的伪类和伪元素,可以更精确地选取目标元素。例如,要选择某个class为"example"的元素的第一个子元素,可以使用".example:first-child"选择器。 6. 兼容性考虑:在使用CSS替代BeautifulSoupclass时,需要考虑不同浏览器对CSS样式的支持情况,以确保在不同平台上都能正确显示。 综上所述,通过选择器和样式的应用,可以使用CSS来替代BeautifulSoup中的class的用法。CSS的灵活性和强大的选择器功能使得我们可以更方便地定位和修改HTML元素的样式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值