BeautifulSoup获取指定class样式的div的实现


Posted in Python onDecember 07, 2020

如何获取指定的标签的内容是解析网页爬取数据的必要手段,比如想获取<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参数赋值才可以。

另一个例子,获取指定样式的div内的所有图片url,并下载保存:

urls=[]
for img in soup.find('div',attrs={'class':'wrap'}).find_all('img'):#找到class="wrap"的div里面的所有<img>标签
 urls.append(img.attrs['src'])#获取img标签的src属性,即图片网址

i=0
savedir=r'C:\Users\hp\Desktop\Images'#路径中不能包含中文
for url in urls:
 urllib.urlretrieve(url, '%s\%s.jpg'%(savedir,i))
 i+=1
print 'Done'

更多用法,可参考:https://3water.com/article/184386.htm

到此这篇关于BeautifulSoup获取指定class样式的div的实现的文章就介绍到这了,更多相关BeautifulSoup获取class样式的div内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
Python新手们容易犯的几个错误总结
Apr 01 Python
Django验证码的生成与使用示例
May 20 Python
VSCode下好用的Python插件及配置
Apr 06 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
Django组件content-type使用方法详解
Jul 19 Python
Python  Django 母版和继承解析
Aug 09 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
Sep 17 Python
selenium 多窗口切换的实现(windows)
Jan 18 Python
Python 列表反转显示的四种方法
Nov 16 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 #Python
Selenium+BeautifulSoup+json获取Script标签内的json数据
Dec 07 #Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 #Python
用python对excel查重
Dec 07 #Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 #Python
python 通过 pybind11 使用Eigen加速代码的步骤
Dec 07 #Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 07 #Python
You might like
php中的Base62类(适用于数值转字符串)
2013/08/12 PHP
php is_executable判断给定文件名是否可执行实例
2016/09/26 PHP
php实现产品加入购物车功能(1)
2020/07/23 PHP
PHP实现的杨辉三角求解算法分析
2019/03/11 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
javascript中&quot;/&quot;运算符常见错误
2010/10/13 Javascript
JS 控制小数位数的实现代码
2011/08/02 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
2012/10/18 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
jq源码解析之绑在$,jQuery上面的方法(实例讲解)
2017/10/13 jQuery
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
node解析修改nginx配置文件操作实例分析
2019/11/06 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
node.js中npm包管理工具用法分析
2020/02/14 Javascript
python实现简单socket通信的方法
2016/04/19 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
2016/05/28 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
Python时间获取及转换知识汇总
2017/01/11 Python
python flask实现分页效果
2017/06/27 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
用python实现学生管理系统
2020/07/24 Python
利用python如何实现猫捉老鼠小游戏
2020/12/04 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
python装饰器代码深入讲解
2021/03/01 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
香港家用健身器材、运动器材及健康美容仪器专门店:FitBoxx
2019/12/05 全球购物
创意活动策划书
2014/01/15 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书