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中wx将图标显示在右下角的脚本代码
Mar 08 Python
在Python的Django框架中创建和使用模版
Jul 15 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
通过python顺序修改文件名字的方法
Jul 11 Python
python3实现点餐系统
Jan 24 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
简单了解python单例模式的几种写法
Jul 01 Python
使用pandas 将DataFrame转化成dict
Dec 10 Python
Python动态声明变量赋值代码实例
Dec 30 Python
使用python将HTML转换为PDF pdfkit包(wkhtmltopdf) 的使用方法
Apr 21 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 计划任务 检测用户连接状态
2012/03/29 PHP
PHP 5.3新增魔术方法__invoke概述
2014/07/23 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
Javascript 错误处理的几种方法
2009/06/13 Javascript
jQuery 处理表单元素的代码
2010/02/15 Javascript
JQuery拖拽元素改变大小尺寸实现代码
2012/12/10 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
2014/12/05 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
js实现按钮颜色渐变动画效果
2015/08/20 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
2016/11/24 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
vue.js绑定事件监听器示例【基于v-on事件绑定】
2018/07/07 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
python里glob模块知识点总结
2021/01/05 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
HTML5离线缓存在tomcat下部署可实现图片flash等离线浏览
2012/12/13 HTML / CSS
如何使用canvas绘制可移动网格的示例代码
2020/12/14 HTML / CSS
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
2014年团员学习十八大思想汇报
2014/09/13 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
单位未婚证明范本
2014/11/25 职场文书