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实现自动登录人人网并访问最近来访者实例
Sep 26 Python
Python运算符重载用法实例
May 28 Python
Python脚本处理空格的方法
Aug 08 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Python处理Excel文件实例代码
Jun 20 Python
pyqt5自定义信号实例解析
Jan 31 Python
攻击者是如何将PHP Phar包伪装成图像以绕过文件类型检测的(推荐)
Oct 11 Python
python实现归并排序算法
Nov 22 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
选择Python写网络爬虫的优势和理由
Jul 07 Python
Django 1.10以上版本 url 配置注意事项详解
Aug 05 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下获取客户端ip地址的函数
2010/03/15 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
Javascript与flash交互通信基础教程
2008/08/07 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
基于jquery实现人物头像跟随鼠标转动
2015/08/23 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
AngularJS入门教程之路由与多视图详解
2016/08/19 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
jquery在vue脚手架中的使用方式示例
2017/08/29 jQuery
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
layer.js open 隐藏滚动条的例子
2019/09/05 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
java直接调用python脚本的例子
2014/02/16 Python
Python库urllib与urllib2主要区别分析
2014/07/13 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python : turtle色彩控制实例详解
2020/01/19 Python
python实现画图工具
2020/08/27 Python
Scrapy基于scrapy_redis实现分布式爬虫部署的示例
2020/09/29 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
公证委托书模板
2014/04/03 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
结婚通知短信大全
2015/04/17 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
Django程序的优化技巧
2021/04/29 Python
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android