python 爬虫-beautifulsoup4

利用它可以不用编写正则表达式即可方便的实现网页信息的提取。

pip3 install beautifulsoup4

用法讲解:
常用解析库:

lxml HTML解析器 

lxml XML解析器

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.prettify())  #格式化代码

print(soup.title.string)

------------------------------------------------------------------

#标签选择器:

##选择元素:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.title)

print(type(soup.title))

print(soup.head)

print(soup.p)

如果有很多满足条件,只会输出第一个。

##获取名称:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.title.name)

##获取属性:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.attrs['name'])#获取name属性的值

print(soup.p['name'])

##获取内容:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.string)

##嵌套选择:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.head.title.string)


##1、子节点和子孙节点:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.children)#迭代器

for i,child in enumerate(soup.p.children):

    print(i,child)

##2

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.contents)#获取p内的所有内容,列表

##3

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.descendants) #迭代器

for i,child in enumerate(soup.p.descendants):

    print(i,child)

##1、父节点和祖先节点:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.p.parent) #迭代器

##2

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(enumerate(list(soup.p.parents))) #迭代器


##兄弟节点

from bst import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(list(enumerate(soup.a.next_siblings)))

print(list(enumerate(soup.a.privious_siblings)))

------------------------------------------------------------------

#标准选择器

find_all(name,attrs,recursive,text,**kwargs)

可根据标签名、属性、内容查找文档

##name

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'html')

print(soup.find_all(''ul))

print(type(soup.find_all('ul')[0]))


from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

for ul in soup.find_all('ul'):

    print(ul.find_all('li'))


##attrs

from bs4  import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.find_all(attrs={'id':'list-1'}))

print(soup.find_all(attrs = {'name':'element'}))

print(soup.find_all(id = 'list-1'))

print(soup.find_all(class_='element')) ##以上四句的输出一样


##text

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.find_all(text='Foo'))


#find(name,attrs,recursive,text,**kwargs)

返回单个元素.

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

print(soup.find('ul'))

print(type(soup.find('ul')))

print(soup.find('page'))


#find_parents(),find_parent()

find_next_siblings() find_next_sibling()

find_all_next()  find_next()

find_all_previous() find_previous()


#CSS选择器  

通过select()直接传入CSS选择器即可完成选择

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

pirnt(soup.select('.panel.panel-heading'))# class用.

print(soup.select('ul li'))

print(soup.select('#list-2.element'))

print(type(soup.select('ul')[0]))#


from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

for ul in soup.select('ul'):

    print(ul.select('li'))

##获取属性

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

for ul in soup.select('ul'):

    print(u['id'])

    print(ul.attrs['id'])

##获取内容

from bs4 import BeautifulSoup

soup = BeautifulSoup(html,'lxml')

for ul in soup.select('li'):

    print(li.get_text())


#标签选择器

#标准选择器

#CSS选择器

总结:

 * 推荐使用lxml解析库,必要使用html.parser

 * 标签选择筛选功能弱但是速度快。

 * 建议使用find(),find_all()查询匹配单个结果或者多个结果。

 * 如果对CSS选择器熟悉可以使用select()

 * 记住常用的获取属性和文本值的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/273965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

魔兽控制命令ID

来源:http://tieba.baidu.com/p/1084211586本次技能ID大全共收录ID368条不包括重复的ID,物品类技能的ID使用必须将物品技能单独抽离出来并设置“物品技能false”,拥有命令字符串的物品请参考拥有相同字符串的4族中立技能。P.S所有ID都是按照从小到大的顺…

python爬虫框架--scrapy 基本使用

流程框架: 1、抓取第一页:请求第一页的URL并得到源代码,进行下一步分析。 2、获取内容和下一页链接:分析源代码,提取首页内容,获取下一页链接等待进一步爬取。 3、保存爬取结果:将爬取结果保存为…

jsp页面的使用

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1.获取资源文件 InputStream isthis.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties"); Str…

python爬虫安装错误与解决方式

# 安装错误: error:Microsoft Visual C 14.0 is required... 下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted pip install xxx.whl # 运行错误 1: from .. Import etree ImportError:DLL load failed pip uninstall lx…

工欲善其事必先利其器系列之:在VS里面折叠js代码

之前用vs写js的时候经常因为js代码过长而且不能像cs文件里面的方法一样进行折叠而抓狂,直到在扩展库发现了这款插件有了它就可以把代码进行折叠了 插件地址转载于:https://www.cnblogs.com/Chendaqian/p/3396702.html

python- 基础 map方法

python中map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。 例如,对于list [1, 2, 3, 4, 5, 6, 7, 8, 9] 如果希望把list的每个…

C算法编程题(二)正螺旋

前言 上一篇《C算法编程题(一)扑克牌发牌》 写东西前总是喜欢吐槽一些东西,还是多啰嗦几句吧,早上看了一篇博文《谈谈外企涨工资那些事》,里面楼主讲到外企公司包含的五类人,其实不只是外企如此&#xff0c…

同时获取同一等级下多个class值的节点的方法

方法: tr_ soup.find("div", class_"mod_cont fcolor30").find_all("tr", attrs{"class":["md_tr font14 bgcolor-s","md_tr font14 bgcolor"]}) 同时获取两个不同的class.例如: 当Beauti…

【循序渐进学Python】6.Python中的函数

1. 创建函数 一个函数代表一个行为并且返回一个结果(包括None),在Python中使用def关键字来定义一个函数,如下: def hello(name):print hello, name ! 接下来调用函数,并查看其返回值: # output: # hello,gy! # None …

求子数组的最大和

穷举法&#xff1a; int MaxSubArraySum(int a[], int n) { int i, j, MaxSum 0, tmpSum, cnt; for (i1; i<n; i) { for (j0; ji<n; j) { cnt 0; tmpSum 0; while (cnt < i) { tmpSum a[jcnt]; cnt; } if (MaxSum < tmpSum) { MaxSum tmpSum; } } } return Ma…

scrapy框架-post使用

scrapy中使用FormRequest向网页提交数据 Scrapy post使用 如何post data&#xff1a; http://httpbin.org/post FormRequest : post请求 GitHub Login 借助浏览器分析登陆行为。 分析post的内容先尝试一次错误的登陆&#xff1a;如下&#xff1a;分析&#xff1a;需要post…

duilib进阶教程 -- 改进窗口拖动 (12)

现在大家应该都知道caption"0,0,0,32"&#xff0c;是指示标题栏区了吧&#xff0c;如果想要整个窗口都能拖动呢&#xff1f; 那直接把高度改成和窗口一样不就得了~O(∩_∩)O~ 嗯&#xff0c;这样是可以&#xff0c;比如窗口高度是600&#xff0c;那么我们指定caption…

python- 基础 range方法的使用

1、第一种用法 index[1,2,0,5,9,8,10,6,4,7] for i in range(len(index)): print(index[i]) 结果&#xff1a; λ py test.py 1 2 0 5 9 8 10 6 4 7 2、第二种用法&#xff1a; index[1,2,0,5,9,8,10,6,4,7] for i in range(0,len(index),2): print(index[i]) 运…

Oracle行列转换小结

目录结构如下&#xff1a;行转列列转行[一]、行转列 1.1、初始测试数据 表结构&#xff1a;TEST_TB_GRADE Sql代码 create table TEST_TB_GRADE ( ID NUMBER(10) not null, USER_NAME VARCHAR2(20 CHAR), COURSE VARCHAR2(20 CHAR), SCORE FLOAT ) 初始…

python- 进阶 与flask的搭配使用---定时任务框架APScheduler学习详解

APScheduler简介 在平常的工作中几乎有一半的功能模块都需要定时任务来推动&#xff0c;例如项目中有一个定时统计程序&#xff0c;定时爬出网站的URL程序&#xff0c;定时检测钓鱼网站的程序等等&#xff0c;都涉及到了关于定时任务的问题&#xff0c;第一时间想到的是利用ti…

Mingw下g++编译执行顺序错误

今天写一个简单的线性表时&#xff0c;用Mingw中的g编译、调试、运行时发现一个奇怪的现象&#xff1a;程序的执行顺序与实际编写顺序不一致。 编译环境&#xff1a;代码编写 win7下 editplus Mingw 4.3.3 g 代码片段如下&#xff1a; 1 //function: create a list 2 //ti…

python系统学习1-程序设计的基本方法

一、程序设计基本方法 计算机与程序设计 编译和解释 程序的基本编写方法 计算机编程 1、计算机与程序设计 &#xff08;1&#xff09;、计算机是根据指令操作数据的设备 功能性&#xff1a;对数据的操作、表现为数据计算、输出输入处理和结果存储。 可编程性&#xff1a;…

python 系统学习实例1.1 - 华氏度与摄氏度的转换

# C ( F - 32 ) / 1.8‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ # F C * 1.8 32‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫…

EMS问题

如果EMS启动后在运行时报出 JMS error: "Not allowed to create destination这个错误&#xff0c;可能就是你启动方式的问题了进入到EMS的安装目录的bin目录下&#xff0c;运行tibemsca.bat那个文件就好使了。转载于:https://www.cnblogs.com/xiaotianyu/p/3421737.html

python 系统学习实例1.2 - 人民币与美元的转换

# RMB USD / 6.78‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬ # USD RMB* 6.78 def tempConvert(): t input("请输入数值:") …