爬虫五 Beautifulsoup模块详细
一、基本使用
from bs4 import BeautifulSoup
htmlCharset = "GB2312"
soup=BeautifulSoup(html_doc,'lxml', fromEncoding=htmlCharset) #具有容错功能,指定编码
res=soup.prettify() #处理好缩进,结构化显示
一、标签选择器
print(soup.p) #存在多个相同的标签则只返回第一个
print(soup.a) #存在多个相同的标签则只返回第一个
print(soup.p.name)#获取标签的名称
print(soup.p.attrs)#获取标签的属性
print(soup.p.string)#获取表的内容
print(soup.head.title.string)#嵌套选择
print(soup.body.a.string)#嵌套选择
print(soup.p.contents) #p下所有子节点
print(soup.p.children) #得到一个迭代器,包含p下所有子节点
print(soup.p.descendants) #获取子孙节点,p下所有的标签都会选择出来
print(soup.a.parent) #获取a标签的父节点
print(soup.a.parents) #找到a标签所有的祖先节点,父亲的父亲,父亲的父亲的父亲.
print(soup.a.next_siblings) #得到生成器对象,获取标签下面的兄弟
print(soup.a.previous_siblings) #得到生成器对象获取标签前面的兄弟
二、标准选择器
格式:find_all(name,attrs,recursive,text,**kwargs) 即find_all(标签名称,标签属性,嵌套查找,文本查找,**kwargs)
1、按照标签名查找
print(soup.find_all('a',id='link3',attrs={'class':"sister"}))
print(soup.find_all('a')[0].find('span')) #嵌套查找 #2、按照属性查找
# print(soup.p.find_all(attrs={'id':'link1'})) #等同于print(soup.find_all(id='link1'))
# print(soup.p.find_all(attrs={'class':'sister'}))
# print(soup.find_all(class_='sister')) #3、按照文本内容查找
print(soup.p.find_all(text="The Dormouse's story")) # 按照完整内容匹配(是==而不是in),得到的结果也是内容 4、按正则表达式查找
soup.findAll(re.compile('^b'))#默认已导入re本语句会查找所有b开头的标签,例如:body,b
5、按照列表查找
soup.findAll(['p','title'])#传入列表时,BeautifulSoup会将所有与列表中任一匹配的元素返回。 4、find和find_all的异同
1、find()相当于find_all()中limit=1的时候,而.limit参数是用于限制返回搜索的结果数,当搜索的达到limit限制时,就停止搜索返回搜索结果。
2、find()返回的是结果,find_all()返回的是一个列表
3、两者的使用格式都相同 总结:
soup.find_all(href=re.compile('baidu'))#href包含‘href’的tag
soup.find_all(href=re.compile('baidu'),id='box1)#传入多个参数,找出同时满足两个条件的tag
soup.find_all(class_='myclass')#找出class值为myclass的tag,注意下划线不能少
soup.findAll(attrs={'class':'myclass','id'='box'})#特殊的参数可以定义字典参数来查找。查找多个参数时,也可以用此方法
如果一个指定名字的参数不是搜索内置的参数名,搜索时会把该参数当作指定名字tag的属性来搜索,
如果包含一个名字为 id 的参数,Beautiful Soup会搜索每个tag的”id”属性。
当想用class的时候,由于class是python的关键词,不能直接用,可以用class_代替class
五 CSS选择器
1、CSS选择器
print(soup.p.select('.sister')) #
print(soup.select('.sister span'))
print(soup.select('#link1'))
print(soup.select('#link1 span'))
print(soup.select('#list-2 .element.xxx'))
print(soup.select('#list-2')[0].select('.element')) #可以一直select,但其实没必要,一条select就可以了,嵌套查找
print(soup.select('#list-2 h1')[0].attrs)# 获取属性
print(soup.select('#list-2 h1')[0].get_text())# 获取内容
soup.select('.myclass #box')#后代查找
soup.select('head>title')#子查找
soup.select('div+p')#相邻兄弟查找
soup.select('div~p’)#后续兄弟查找
soup.select('.myclass a[id="box"]') #同时还可以加入属性查找。
select()方法返回的是列表形式。
爬虫五 Beautifulsoup模块详细的更多相关文章
- 爬虫五 Beautifulsoup模块
一 介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你 ...
- Python爬虫之Beautifulsoup模块的使用
一 Beautifulsoup模块介绍 Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Be ...
- Python 爬虫三 beautifulsoup模块
beautifulsoup模块 BeautifulSoup模块 BeautifulSoup是一个模块,该模块用于接收一个HTML或XML字符串,然后将其进行格式化,之后遍可以使用他提供的方法进行快速查 ...
- Python网络爬虫之BeautifulSoup模块
一.介绍: Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮 ...
- 爬虫利器BeautifulSoup模块使用
一.简介 BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,同时应用场景也是非常丰富,你可以使用 ...
- 爬虫四 selenium模块详细参数
selenium元素定位方法 一.访问页面并获取网页html from selenium import webdriver browser = webdriver.Chrome() browser.g ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- 【爬虫入门手记03】爬虫解析利器beautifulSoup模块的基本应用
[爬虫入门手记03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.Bea ...
- 【网络爬虫入门03】爬虫解析利器beautifulSoup模块的基本应用
[网络爬虫入门03]爬虫解析利器beautifulSoup模块的基本应用 1.引言 网络爬虫最终的目的就是过滤选取网络信息,因此最重要的就是解析器了,其性能的优劣直接决定这网络爬虫的速度和效率.B ...
随机推荐
- Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾
Atitit.播放系统规划新版本 v4 q18 and 最近版本回顾 1 版本12 (ing)4 1.1 无映射nas系统..4 1.2 图片简介搜刮其4 1.3 12.8. 电影图片增加png, ...
- vivado与modelsim的联合仿真(一)
vivado软件中也自带仿真工具,但用了几天之后感觉仿真速度有点慢,至少比modelsim慢挺多的.而modelsim是我比较熟悉的一款仿真软件,固然选它作为设计功能的验证.为了将vivado和mod ...
- Ionic学习笔记4_ionic路由(页面切换)
1.1. ionic路由机制: 状态 1.2. ion-nav-view <body ng-controller="firstCtrl"> <a class= ...
- mac 火狐 下载 任何文件都是失败
今天在从邮件中下载附件,怎么点击下载 浏览器上都是失败 最后突然想到,我改过火狐的下载路径,改到根目录下了,根目录下应该是没有权限保存文件的 后把下载路径改成 “下载” 就可以正常下载了
- iOS开发中邮箱,电话号码,身份证,密码,昵称正则表达式验证
//邮箱 + (BOOL) validateEmail:(NSString *)email { NSString *emailRegex = @"[A-Z0-9a-z._%+-]+@ ...
- MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考
我们知道,MapReduce有三层调度模型,即Job——>Task——>TaskAttempt,并且: 1.通常一个Job存在多个Task,这些Task总共有Map Task和Redcue ...
- apache POI 操作excel<导入导出>
1.首先导入maven依赖 <!-- POI核心依赖 --> <dependency> <groupId>org.apache.poi</groupId> ...
- 虚拟化笔记05 OpenFiler configuration
5.OpenFiler configuration 登录Openfiler 步骤1:安装 FireFox 步骤2:通过FireFox以HTTPS://server-ip:446 远程访问OpenFil ...
- 【Mac + Appium + Python3.6学习(二)】之Android自动化测试,appium-desktop配置和简易自动化测试脚本
上一篇文章介绍安装appium测试环境,这一片研究介绍如何测试Android自动化. 上一篇地址:<[Mac + Appium学习(一)]之安装Appium环境> 这一篇参考:<Ma ...
- VLC Web插件的浏览器兼容性
网页插件实现原理 IE浏览器基于Activex插件来实现,非IE浏览器采用NPAPI来实现,所以,非浏览器需要支持NPAPI来实现. IE浏览器 FF浏览器(版本小于52) 原因从 Firefox 版 ...