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中二维阵列的变换实例
Oct 09 Python
python中函数总结之装饰器闭包详解
Jun 12 Python
python3中set(集合)的语法总结分享
Mar 24 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
Python爬虫实现使用beautifulSoup4爬取名言网功能案例
Sep 15 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
pycharm 2020 1.1的安装流程
Sep 29 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
python解压zip包中文乱码解决方法
Nov 27 Python
全网最详细的PyCharm+Anaconda的安装过程图解
Jan 25 Python
如何用python绘制雷达图
Apr 24 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连接MySQL查询结果中文显示乱码解决方法
2013/10/25 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP购物车类Cart.class.php定义与用法示例
2016/07/20 PHP
Javascript实例教程(19) 使用HoTMetal(2)
2006/12/23 Javascript
JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理
2009/10/25 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
2017/07/10 Javascript
如何使用JS在HTML中自定义字符串格式化
2017/07/20 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
Vue.js自定义事件的表单输入组件方法
2018/03/08 Javascript
微信小程序实现天气预报功能
2018/07/18 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
基于vue项目设置resolves.alias: '@'路径并适配webstorm
2020/12/02 Vue.js
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
python中is与双等于号“==”的区别示例详解
2017/11/21 Python
pandas数据处理进阶详解
2019/10/11 Python
ipad上运行python的方法步骤
2019/10/12 Python
python各层级目录下import方法代码实例
2020/01/20 Python
pandas的resample重采样的使用
2020/04/24 Python
python 常见的反爬虫策略
2020/09/27 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
五个2015 年最佳HTML5 框架
2015/11/11 HTML / CSS
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
网上开店必备创业计划书
2014/01/26 职场文书
仓管员岗位责任制
2014/02/19 职场文书
毕业生求职信
2014/06/10 职场文书
向国旗敬礼活动总结
2014/09/27 职场文书
学前班语言教学计划
2015/01/20 职场文书
如何写新闻稿
2015/07/18 职场文书
导游词之井冈山
2019/11/20 职场文书
go语言map与string的相互转换的实现
2021/04/07 Golang
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers
【TED出品】天梯非主流开心游1700 划水骑士
2022/03/31 魔兽争霸