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发送HTTP请求的方法小结
Jul 08 Python
python解决汉字编码问题:Unicode Decode Error
Jan 19 Python
python中requests使用代理proxies方法介绍
Oct 25 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 Python
python文件选择对话框的操作方法
Jun 27 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
详解Python用三种方式统计词频的方法
Jul 29 Python
wxPython实现带颜色的进度条
Nov 19 Python
Python常用编译器原理及特点解析
Mar 23 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
python爬虫线程池案例详解(梨视频短视频爬取)
Feb 20 Python
8g内存用python读取10文件_面试题-python 如何读取一个大于 10G 的txt文件?
May 28 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通过array_shift()函数移除数组第一个元素的方法
2015/03/18 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
永不消失的title提示代码
2007/02/15 Javascript
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
JavaScript基础语法让人疑惑的地方小结
2012/05/23 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
关于jquery form表单序列化的注意事项详解
2017/08/01 jQuery
JS实现520 表白简单代码
2018/05/21 Javascript
vue微信分享到朋友圈 vue微信发送给好友
2018/11/28 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
elasticsearch python 查询的两种方法
2019/08/04 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
Python迭代器模块itertools使用原理解析
2019/12/11 Python
使用python去除图片白色像素的实例
2019/12/12 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
Python实现企业微信机器人每天定时发消息实例
2020/02/25 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
通过Python pyecharts输出保存图片代码实例
2020/11/25 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
HTML5获取当前地理位置并在百度地图上展示的实例
2020/07/10 HTML / CSS
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
优秀毕业生自我鉴定
2014/01/19 职场文书
幼儿园毕业寄语
2014/04/03 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
绿色出行口号
2014/06/18 职场文书
2014乡镇党政班子四风问题思想汇报
2014/09/14 职场文书