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中method的参数传递过程
Apr 02 Python
Python pickle模块用法实例
Apr 14 Python
python通过apply使用元祖和列表调用函数实例
May 26 Python
python数组复制拷贝的实现方法
Jun 09 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
Python网络爬虫之爬取微博热搜
Apr 18 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
python读写配置文件操作示例
Jul 03 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
python读取excel数据并且画图的实现示例
Feb 08 Python
python 利用PyAutoGUI快速构建自动化操作脚本
May 31 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 base64+gzinflate压缩编码和解码代码
2008/10/03 PHP
php adodb连接不同数据库
2009/03/19 PHP
编写php应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
mac下安装nginx和php
2013/11/04 PHP
PHP实现绘制3D扇形统计图及图片缩放实例
2014/10/01 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
php表单处理操作
2017/11/16 PHP
PDO::quote讲解
2019/01/29 PHP
Jquery 切换不同图片示例代码
2013/12/05 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
js控制网页背景音乐播放与停止的方法
2015/02/06 Javascript
分步解析JavaScript实现tab选项卡自动切换功能
2016/01/25 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
JavaScript仿百度图片浏览效果
2016/11/23 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
JS随机数产生代码分享
2018/02/24 Javascript
jQuery实现每隔一段时间自动更换样式的方法分析
2018/05/03 jQuery
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
举例讲解Python程序与系统shell交互的方式
2015/04/09 Python
利用Python如何生成随机密码
2016/04/20 Python
python opencv实现任意角度的透视变换实例代码
2018/01/12 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
pandas实现DataFrame显示最大行列,不省略显示实例
2019/12/26 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
Kathmandu澳洲户外商店:新西兰户外运动品牌
2017/11/12 全球购物
HealthElement海外旗舰店:新西兰大卖场
2018/02/23 全球购物
小学生打架检讨书
2014/01/26 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
环保志愿者活动总结
2014/06/27 职场文书
大学生助学金感谢信
2015/01/21 职场文书
2015年办公室个人工作总结
2015/04/20 职场文书
Elasticsearch 配置详解
2022/04/19 Java/Android