解析库的基本使用(BeautifulSoup、Xpath(重点)、PyQuery)
再次复习一下
文章目录
- 一、BeautifulSoup库的基本使用
- 1.1简介
- 1.2 BeautifulSoup的安装
- 1.3解析器用法和解释
- 1.4 BeautifulSoup的基本使用
- 1.5 总结
- 1.6 实战篇
- 二.Xpath(重点)
- 2.1 Xpath介绍
- 2.2 Xpath常用规则
- 2.3 Xpath的使用
- 2.3.1 Xpath解析HTML文本
- 2.3.2 Xpath解析HTML文档
- 2.3.2.1 技巧1:使用concat()方法将两个xpath表达式的结果合并
- 2.3.2.2 技巧2:使用last()方法从筛选出的标签列表的末尾开始提取标签
- 2.3.2.3 技巧3:使用contains的用法,匹配含有指定文本的标签
- 2.3.2.4 总结(什么?还没懂 )
- 2.4 实战
- 三、pyquery 解析(这个不常用,平常用Xath多一点)
- 1.安装和初始化
- 2.pyquery的使用(以后再写)
- 3.总结
一、BeautifulSoup库的基本使用
1.1简介
正则表达式对于我们来说用起来是不方便的,而且需要记很多规则,所以用起来不是特别熟练。BeautifulSoup库一个灵活又方便的网页解析库,处理高效,支持多种解析器。利用它就不用编写正则表达式也能方便的实现网页信息的抓取。
为什么很多人将BeautifulSoup作为自己学习Python网络爬虫的第一个解析库。因为学习BeautifulSoup会加强你对标签树、子标签、父标签、后代标签以及标签的结构的认识,为日后学习Xpath打下基础,当你学习了Xpath后,你会发现BeautifulSoup是非常不友好的,而学了Xpath之后,基本不用BeautifulSoup了,但是这些全是学习Xpath的基础。
BeautifulSoup是将HTML代码当做一个便签树来处理,BeautifulSoup对应一个HTML/XML文档的全部内容 。其中的每一个标签的结构如下:
1.2 BeautifulSoup的安装
在cmd命令行中:
pip install beautifulsoup4
导入方式:
from bs4 import BeautifulSoup # 或着 import bs4
1.3解析器用法和解释
soup = BeautifulSoup(html_test,'html.parser')
soup = BeautifulSoup(html_test,'lxml')
soup = BeautifulSoup(html_test,'xml')
soup = BeautifulSoup(html_test,'html5lib')
解析器 | 使用方法 | 条件 | 优势 | 劣势 |
---|---|---|---|---|
Python标准库(bs4的HTML解析器) | BeautifulSoup(html_test,‘html.parser’) | 安装bs4库 | Python的内置标准库、执行速度适中、文档容错能力强 | Python 2.7.3 or 3.2.2)前的版本中文档容错能力差 |
lxml HTML解析器 | BeautifulSoup(html_test,‘lxml’) | pip install lxml | 速度快、文档容错能力强 | 需要安装C语言库 |
lxml XML解析器 | BeautifulSoup(html_test,‘xml’) | pip install lxml | 速度快、·唯一支持XML的解析器 | 需要安装C语言库 |
html5lib的解析器 | BeautifulSoup(html_test,'html5lib‘) | pip install html5lib | 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 | 速度慢、不依赖外部扩展 |
1.4 BeautifulSoup的基本使用
from bs4 import BeautifulSoup
import re
html = '''<body>
<header id="header"><h3 id="name">小鱼儿与花无缺</h3><title>标题</title><div class="sns"><a class="a-current-menu-item" href="http://www.mytieba.com/feed/" target="_blank" rel="nofollow" title="RSS">a_test</a><a class="a-current-menu-item" href="http://mytieba.com/mytieba" target="_blank" rel="nofollow" title="Weibo">b_test</a><a href="https://www.mytieba.com/in/mytieba" target="_blank" rel="nofollow" title="Linkedin">c_test</a><a href="mailto:mytieba@gmail.com" target="_blank" rel="nofollow" title="envelope">d_test</a>;<f><!--This is a comment--></f><c>This is not a comment</c></div><div class="nav"><ul><li class="current-menu-item"><a href="http://www.mytieba.com/">hello</a></li>
<li><a href="http://www.mytieba.com/about-me/">word</a></li>
<li><a href="http://www.mytieba.com/post-search/">nihao</a></li>
<li><a href="http://www.mytieba.com/wp-login.php">kkb</a></li>
</ul> </div>
</header>
</body>
'''
html = html.replace('\n', '')
print("方法一,使用soup.<tag>来获取指定的标签---------------------------------------")
#使用soup.<tag>来获取指定的标签:
#soup.a来获取HTML中的a标签,如果结果有多个,取第一个
soup = BeautifulSoup(html, "html.parser")
print(soup.a)#获取标签的属性
print("a标签的名字是:", soup.a.name)print(type(soup.a.attrs))
print("a标签的属性为:", soup.a.attrs)print("a标签的class属性是", soup.a.attrs['class'])print(type(soup.a.string))
print("a标签中的非属性字符串为:", soup.a.string)print(type(soup.f.string))
print("f标签中的注释为:", soup.f.string)print(type(soup.c.string))
print("c标签中的注释为:", soup.c.string)print("方法二---------------------------------------")
#方法二---------------------------------------:
soup = BeautifulSoup(html,'lxml')
# 格式化输出 soup 对象的内容
# print(soup.prettify())# 根据标签名获取整个标签(但是拿出的是第一个)
print(soup.li)# 获取标签的名字
print("获取标签的名字:",soup.title.name)# 获取标签中的文本
print("获取标签中的文本:",soup.title.string)# 获取标签title的父标标签
print("获取标签title的父标标签:",soup.title.parent.name)# 获取li标签的子标签
print("获取li标签的子标签:",soup.li.contents)# 获取便签的属性值的两种方式
print(soup.li["class"])
print(soup.li.attrs['class'])# 使用select,css选择器
print(soup.select('li'))
# 类名前加.,id名前加#
print("类名前加.,id名前加#:",soup.select('.current-menu-item'))# 获取内容
print("获取内容",soup.select('.current-menu-item')[0].get_text())# 获取li标签下面的子标签
print(soup.select('li > a')[2].get_text())# 获取属性值
print(soup.select('.current-menu-item')[0].attrs['class'])# 使用find和findall进行查找
print(soup.find('li',attrs={'class':'current-menu-item'}))
print(soup.find_all('li',attrs={"class":"current-menu-item"})[0])
1.5 总结
基本用法:
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'lxml')
1.调用soup.prettify()方法
把要解析的字符串以标准的缩进格式输出
2.节点选择器
soup.title.string
(1)选择元素:soup.title、soup.title.sring soup.head soup.p
(2)提取信息:1)获取节点名称:soup.title.name2) 获取属性:soup.p.attrs、soup.p.attrs['name']3) 获取内容:soup.p.string
(3)嵌套选择:
soup.head.title.string
(4)关联选择:enumerate() //生成器类型--------------------------------------
(1)soup.p.contents //p节点下的直接子节点列表
(2)soup.p.descendants //p节点下的所有子孙节点(生成器类型)
(3)父节点和祖先节点:soup.p.partent、soup.p.parents
(4)兄弟节点:soup.a.next_siblingsoup.a.previous_siblingsoup.a.next_siblingsenumerate(soup.a.pervious_siblings)
(5)提取信息:soup.a.next_sibling.string
3.方法选择器
find_all(name,attrs,recursive,text,**kwargs)
(1)name:find_all(name='li')
(2)attrs:find_all(attrs={'id':'list-1'})、find_all(class_='element')
(3)text:匹配节点的文本,find_all(text='字符串或正则表达式')
注:
find()的用法与find_all()一样,只不过find()只匹配第一个元素,find_all()匹配所以元素
4.css选择器,调用select()方法
soup.select('.head')
soup.select('ul li') //所有ul下的所有li
soup.select('#list-element')
(1)嵌套选择:
for ul in soup.select('ul'):ul.select('li')
(2)获取属性:
for ul in soup.select('ul')ul.attrs['id']ul['id']
(3)获取文本:
for li in soup.select('li'):li.get_text()lli.string
1.6 实战篇
from bs4 import BeautifulSoup
import requests
from fake_useragent import UserAgent# 使用BeautifulSoup爬取
url = 'https://y.qq.com/'
response = requests.get(url=url, headers={'user-Agent': "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"})
soup = BeautifulSoup(response.text, 'html.parser')# #1.find查找第一个元素
# divs_1 = soup.find('div', {'class': 'debutlist__cont'})
# print(divs_1.text)
# #————————————————————————————
#2. find_all 查找所有
# li_all = soup.find_all('li',{'class':"debutlist__item"})
# for li_all in li_all:
# print('---')
# # print('匹配到的li:',li_all)
# print('li的内容:',li_all.text)
# # print('li的属性:',li_all.attrs)
#————————————————————————————
#3. 最灵活的使用方式
li_quick = soup.find_all(attrs={'class':'debutlist__cont'})
for li_quick in li_quick:print('最灵活的查找方法:',li_quick)
print('li.text(返回标签的内容):',li.text)
names = divs_1.select('span.playlist__title_txt > a')
authors = divs_1.select('div.playlist__author > a')
for name, author in zip(names, authors):print(name.text, author.text, sep=" ")
#————————————————————————————
# 4.BeautifulSoup 使用select方法详解
#(1)通过标签名查找
print(soup.select('title'))
#(2)通过类名查找 debutlist__song
# print(soup.select('.debutlist__song_txt'))
qq_list = soup.select('.debutlist__song_txt')
# print(qq_list)
author = soup.select('p.debutlist__author')
# print(author)
for name,author in zip(qq_list,author):print(name.text,author.text, sep=" 作者:")
#(3)通过 id 名查找
print(soup.select('#search_hot__tit'))
#(4)组合查找 组合查找即和写 class 文件时,标签名与类名、id名进行的组合原理是一样的,例如查找 p 标签中,id 等于 link1的内容,二者需要用空格分开
print(soup.select('div .playlist__other'))
# 直接子标签查找
# print(soup.select("content > div.section_inner > div.mod_playlist.mod_slide > ul > li:nth-child(2) > div > h4 > span > a"))
print(soup.select("head > title"))
print(soup.select("body > div > div > div > div > div > h2"))
#(5)属性查找<a href="/n/ryqq/playlist/1452052493">100首精选粤语歌 怀念旧时光</a>
print(soup.select('a[href="/n/ryqq/playlist/1452052493"]'))
#同样,属性仍然可以与上述查找方式组合,不在同一节点的空格隔开,同一节点的不加空格span
print(soup.select('span a[href="/n/ryqq/playlist/1452052493"]'))
二.Xpath(重点)
2.1 Xpath介绍
1.Xpath,全称是XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言。它最初是用来搜索XML文档的,但是同样适用于
HTML文档的搜索。
2.用xpath速度比较快,是爬虫在网页定位中的较优选择,但是很多网页前端代码混乱难以定位,而学习定位也较为不易(主要是全面的教程较少)。
3.Xpath教程:
W3C的
官方的
菜鸟教程
4.Xpath 插件(百度搜索,有很多的)
2.2 Xpath常用规则
选取节点
查找特定的节点,谓语被嵌在方括号中
2.3 Xpath的使用
关于xpath、pyquery和beautifulsoup的一点区别—xpath可以根据文本定位到节点(相关内容在:2.3.2.3 技巧3中:使用contains的用法,匹配含有指定文本的标签)
安装:
pip install lxml
2.3.1 Xpath解析HTML文本
使用Xpath解析HTML文本,用etree.HTMLParser()方法
from lxml import etree
text = '''
<html><head><title>Old boy's story, do you want to hear it?</title></head> <body>
<a href="link1" class="a1" id='id1'>wo</a>
<a href="link2" class="a2" id='id1'>ai</a>
<a href="link3" class="a3" id='id2'>ni</a>
<a link="https"></a>
<b link="what?"></b>
<b link="Why?"></b>
</body>
</html>
'''
# 使用etree.HTML()方法解析HTML文本
html = etree.HTML(text, etree.HTMLParser())
result = html.xpath('/html/head/title/text()')
##匹配标题
print("html.xpath('/html/head/title/text()')为:\n{}".format(result))
result1 = html.xpath('//a[@id="id1"]/text()')
##匹配属性id为id1的元素,的文本
print("html.xpath('//a[@id='id1']/text()')为:\n {}".format(result1))
result2 = html.xpath('//b/@link')
print(result2)
注:/是绝对路径,//是相对路径
html.xpath('//a[@id="link1"]/text()')
html.xpath('//a/@href')
html.xpath('//a[contains(@id,"link1")]') #包含id属性,并且id属性中含有link1
html.xpath('//a[contains(text(),"cie")]/text()') #包含有文本,文本中有字符串“ni"
2.3.2 Xpath解析HTML文档
Xpath解析HTML文档使用的是etree.HTMLParser()方法
from lxml import etree# 使用etree.parse()方法解析HTNL文档
html = etree.parse('part0015.html', etree.HTMLParser())
result = html.xpath('//*[@id="sigil_toc_id_56"]/text()')
print(result)
part0015.html文档内容
<?xml version='1.0' encoding='utf-8'?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN" xml:lang="zh-CN"><head><title>未知</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><link href="../stylesheet.css" rel="stylesheet" type="text/css"/>
<link href="../page_styles.css" rel="stylesheet" type="text/css"/>
</head><body class="calibre2" id="4OIQ0-150a091a172f42b696e48e6fa0fd8b4c">
<h2 class="calibre4" id="sigil_toc_id_55">CHAPTER 03<br class="calibre7"/>在无情的世界里,守住内心的不妥协</h2><h3 class="calibre8" id="sigil_toc_id_56">与其亡羊补牢,不如未雨绸缪</h3><p class="calibre6">维持一段婚姻是十分艰难的。两个人即便感情再好,在经历了长年累月的亲密接触后,也会觉得相处起来有些索然无味。这是人的本性使然。产生这样的感觉,并不是说你们的感情已经消失了,但是这个时候,两个人的关系容易被别有用心的第三者利用,并介入到你们之中。</p><p class="calibre6">感情不同于任何其他的东西,不是抓得越紧就越牢固,处理不恰当,反而会产生副作用。</p><h4 class="sigil_not_in_toc">婚外情的真相</h4><p class="calibre6">一般来说,结婚年限较久后都会或主动,或被动有 “出轨”的想法。婚姻中虽也有“三年之痛”“七年之痒”一说,但是实际上,有些出轨在婚前是可以预见的。婚姻专家曾说,要想与一段幸福的婚姻结缘,婚前的选择往往比婚后的苦心经营还重要。</p><p class="calibre6">那么什么样的人婚后出轨的可能性较大呢?身为被出轨者又该如何避免自己陷于这样的处境呢?</p><p class="calibre6">1.极度自卑的人</p><p class="calibre6">内心认为自己不值得被爱的人,是十分缺乏安全感的,婚后出轨的可能性也会较大,这在男性身上尤为显著。通常一个男人说配不上你,并不是他谦虚,他是真的觉得自己配不上你。一个人是否优秀,外人说了不算,要这个人自己觉得自己是优秀的才行。</p><p class="calibre6">一个自卑的人往往会以比自己强许多倍的优秀异性为目标,因为他们急需依靠伴侣的优秀来弥补自己内心的“不足”。在追求对方的时候,他们也会极尽卑微,即使你再任性都矢志不渝地宠溺着你。然而,这样的人,婚后出轨的可能性却很大。这种自卑源于他们的内心,外人只能暂时地填补他们心里那种“不足”的感觉。当TA和一个TA认为十分优秀的伴侣在一起时,日子久了只会令TA更自卑。</p><p class="calibre6">就男性而言,在这种自卑的影响下,他们会不由自主地渴望找到更优秀的人,或者找一个比自己还弱的人来崇拜他,好让他有一种被仰视的快感,从而提升自信心和自尊感。这就是为什么有些男人明明各方面条件都不如女方,仍旧还是出轨。</p><p class="calibre6">就女性而言,这种自卑的心理会让她非常缺乏安全感,因此她的内心在对待伴侣时会不由自主地产生不信任,严重缺爱的感觉也需要她不断地反复去跟伴侣“确认”伴侣是否爱她,她可能还会常常偷偷去翻丈夫的手机、电脑等,寻找自己内心怀疑的蛛丝马迹。这种行为很多时候反倒是促使了丈夫真正的出轨。</p><p class="calibre6">2.无进取之心,在生活和事业上都没有长远规划的人</p><p class="calibre6">他们或缺少明确的目标,或没有什么业余爱好,同时也没有烟酒、赌博等不良嗜好,只是内心极度空虚。</p><p class="calibre6">现实生活中,我们每个人的欲望都不可能完全被满足,总会有一些欲望被社会规则压抑,例如贪婪、虚荣、冒险等,也会有很多欲望由于生存压力而被迫放弃。这些欲望作为一种不可忽视的能量存在,唯一能够解决它的方法就是疏导排解。大多数人会把这种能量转化为动力,比如将它们用在自己的业余爱好,或者工作事业上等,这些都能给他们带来一种精神上的愉悦和满足。</p><p class="calibre6">但是,假如一个人觉得以上这些方式都不适用或是自己都感到毫无兴趣,那么TA就会感到压抑和空虚,就会在慌乱中想要随便找点什么来填补空虚,如借助网络、药物等,自然也会将目光投向外遇或不带感情的性。</p><p class="calibre6">3.爱情观不严肃、性价值观开放及虚荣心很强的人</p><p class="calibre6">这种人基本上在婚前就已经跟许多异性有过一夜情或短暂同居的经历了,他们不认为性忠诚是婚姻的责任和承诺。性,对他们来说就是一种发泄手段,是随便和轻易就可发生的。</p><p class="calibre6">另外还有一种容易婚后出轨的人,他们往往具有很强的虚荣心,缺乏自我独立意识,凡事都喜欢随波逐流。</p><p class="calibre6">现代社会四处充斥着快餐文化,各种网络社交软件也提供了不少“约”的便利条件。在这种社会大环境下,如果一个人对很多事情都缺乏自己独立的思考和判断能力,同时又有很强的虚荣心,喜欢与周围的人作比较,那么一旦周围有人在TA面前炫耀自己婚外性的“美好经历”,TA就容易盲目跟风。比如一个男人的朋友找了年轻女人当情人,跟他炫耀,他也会为了“面子”去做同样的事情——之所以这样,只是因为想要得到所谓朋友圈的认同感;比如一个女人身边有“闺密”跟她炫耀自己通过“做情人”,获得了诸多物质上的好处,这种看起来能够非常轻易得到物质的手段,会让这个女人感到分外眼红,假如她的“闺密”还没有她年轻漂亮,那么这种诱惑就更容易让她自甘堕落了。</p><p class="calibre6">4.婚姻中缺乏关爱,情感需求得不到满足</p><p class="calibre6">有些人错误地认为,夫妻生活久了,就不需要浪漫了。实际上,结婚多年,激情退去之后,两人逐渐走向平淡时,就更需要偶尔的浪漫来点缀一下。假如,你的另一半满怀期待地换上了性感的新睡衣,渴望着你的赞美,但你却选择视若无睹;又或者你的另一半,精心给你选了价格偏高的礼物,你却跟他抱怨“孩子学费那么高,浪费这个钱干吗”,久而久之,你的“不解风情”或许就会让TA越来越失望。备受冷漠和自尊损害的TA若是此时能从另外一个人那里得到赞美和温存,那么就很容易将心灵的慰藉转移到那人身上。</p><p class="calibre6">大多数人结婚后,在家庭中都需要承担一部分责任,或是养育孩子,或是支付家庭经济开销。当今社会带给人的压力很大,很多人结婚后常常忙于家庭、工作,得到的关心和支持远没有恋爱的时候多。TA在和伴侣的聊天中得不到回应的时候,只能一个人默默地将悲伤忍下去。可以说,伴侣的冷漠,间接地将配偶推向了另外一个人的怀抱。试想,一边是你不断付出、讨好却得不到任何回应的人,一边是宠着你、爱护你、赞美你的人,你的心会偏向哪一方?</p><p class="calibre6">不在同一个屋檐下生活的情人,跟TA没有矛盾,相互间更能容纳、沟通,感情自然也就会逐步转移了。</p><p class="calibre6">其实,老夫老妻不一定就不需要浪漫。在两个人经济条件允许的情况下,婚后的一些浪漫举动反而会拉近二人的距离。长久平淡的生活,也是需要一点调剂的。</p><p class="calibre6">5.一方曾有不忠行为,二人之间隔阂并未消除</p><p class="calibre6">假如,夫妻一方曾经跟他人暧昧甚至发生过实质性的身体接触,另外一方势必很难释怀。</p><p class="calibre6">想到自己每天辛辛苦苦维持这个家,伴侣却在外与他人花天酒地,悲愤的心理情绪定会油然而生。既然伴侣可以这样不忠,为什么自己就必须忠贞不贰呢?说不定,伴侣还在跟外面的第三者藕断丝连,纠缠不清呢,被发现的已经都这样了,那些自己没察觉的婚外情情况还不知道发生了多少次!当初自己也是曾经被许多人追捧长大的,凭什么现在就要受这样的气?在这种不平心理的暗示下,夫妻间若还是没有深度的心灵沟通,信任危机就会出现,出轨也就“理所当然”了。</p><h4 class="sigil_not_in_toc">如何最大程度地避免婚外性行为,防止婚外情发生?</h4><p class="calibre6">1.多花时间陪伴对方,避免配偶感到孤独</p><p class="calibre6">性心理学家研究发现,孤独感是促使外遇的主要原因。如果夫妻缺乏亲切真诚的沟通和交流,孤独感就会油然而生,更会影响到夫妻之间的性关系。在某些情况下,某一方也就有可能去寻找新的性生活。</p><p class="calibre6">2.学会调剂过于单调的生活</p><p class="calibre6">对单调生活的厌倦是引发婚外情的诱因之一。结婚后,新鲜感一旦消失,剩下的无非也就是柴米油盐酱醋茶的平淡生活。很多生活中的琐碎事务,以及压在肩上的经济负担,使得彼此的热情开始冷却,身体对彼此的诱惑也大大减少,如果夫妻双方不能找出更能激发彼此激情的生活方式或交流方式,那么一些不甘寂寞者便会去寻找外来的片刻之欢。所以婚后,男女双方也应该多创造浪漫约会的机会,时不时地重温恋爱时的激情。</p><p class="calibre6">3.加强沟通,切忌冷暴力</p><p class="calibre6">在前文,我们也反复强调沟通的重要性。夫妻间如果不能进行良好的沟通,就会导致彼此产生猜疑和误会,从而引发争吵。</p><p class="calibre6">争吵不一定是件坏事,有时候这也是一种沟通手段。不过在争吵的过程中,要记住不能只顾着发脾气,也要将彼此内心最真实的想法说出来,要保证每一次的争吵是为了解决问题。一味地吵架,只会伤害夫妻间的感情,久而久之也会影响夫妻关系,从而使夫妻双方对婚姻丧失信心。</p><p class="calibre6">在争吵的过程中,有几点是要特别注意的:要学会控制自己的情绪;不要侮辱对方人格;不要使用尖刻的语言;要随时准备讲和;争吵不一定要分出胜负,要学会妥协和道歉;注意使用委婉的语言。</p><p class="calibre6">4.互相关心,不吝啬对另一半的赞美</p><p class="calibre6">不管是男还是女,不管是成年人还是孩童,每个人都需要得到亲人的鼓励。假如在婚姻家庭中,你总是去指责你的另一半,那么这不仅会使得TA对你产生抵触情绪,也会使得TA对自己逐渐失去信心。</p><p class="calibre6">在承受了工作、生活压力后,夫妻间应该互相体谅对方,不要因为对方晚回家,或者偶尔忘了你们之间的约定,就对TA恶言相向。家,应该是温暖的港湾,是两个人在外受了伤后,可以得到安息庇佑的场所。别把你的家变成剑拔弩张的场所,更别把它变成冰冷毫无生气的空壳。要时刻记住,你们是为了共同的美好生活的愿望走到一起的,并且也要时刻为这个长久的目标而一起努力。</p><h3 class="calibre8" id="sigil_toc_id_57">不仅动感情,还要动脑子</h3><p class="calibre6">我从事两性情感研究工作至今,有太多咨询者跟我分享自己的故事。在说到第三者的话题时,大部分的被出轨者都会发泄他们内心的愤懑和不平。的确,自己辛辛苦苦维系的家,却莫名其妙被那个半路插足过来的第三者给搅和了,任谁也不会心甘情愿地放手。第三者可恶吗?当然!被出轨者内心的不满和怨恨都是可以理解的。但是这样就能把这件事解决了吗?答案显然是否定的。</p><p class="calibre6">素秋是个传统观念极重的女人,和老公佳华的认识让她十分惊喜和意外。佳华比她小六岁,当初素秋也因此犹豫过很久,但是佳华锲而不舍的真心追求打动了她。两个人克服了现实的困难,结婚已经将近十年了,家庭经济条件渐好,还有一个可爱的八岁儿子。一切看起来都那么圆满。</p><p class="calibre6">可这无比幸福的表面之下,却隐藏着素秋没有发现的潜在危机,就在结婚九周年纪念日的前两天,素秋意外发现了佳华出轨的事实。这件事,对素秋来说,几乎不能接受。素秋找佳华询问,佳华也没有隐瞒,一五一十地说了,对方比佳华还要小十多岁,是个才20多岁的女人。两个人在一起也就一年多的时间。那段时间素秋父亲生病住院,素秋又是忙于工作,又是忙于照顾孩子,还要每天去医院,忙得不可开交,有时候情绪上来,难免会对佳华发些脾气。第三者便是在这个时候钻了空子,主动投怀送抱的。心情压抑的佳华没能抵住诱惑,就此犯下了错误。</p><p class="calibre6">佳华跟素秋坦白,他对小三一开始没有什么感情,只是那段时间素秋的态度让他感觉不到爱,于是索性带着一点儿不成熟的报复心理想要“玩玩”。第三者对他很崇拜,无论他怎样发脾气,小三都能容忍,于是佳华也有一点于心不忍,但是他觉得自己内心还是深爱素秋的。</p><p class="calibre6">丈夫的这一番坦白,令素秋宛若遭到晴天霹雳,佳华算是素秋真正意义上的初恋,她无法容忍这么个污点,因此选择离婚。佳华见素秋去意已决,知道留不住,便同意了。两个人快速地办理了离婚手续。</p><p class="calibre6">事情若是就此终结,素秋也就不会来找我了。就在离婚后的第二天,素秋感觉身体有些不适,去医院一检查,不料却是怀孕了。素秋非常不安,思来想去还是将这件事告诉了佳华。佳华本来就不想离婚,这下更是强烈要求复婚,并且在素秋面前再三保证不会再跟第三者有任何联系。素秋思忖良久同意了。</p><p class="calibre6">六月两个人离的婚,同年七月复婚,也许是心里压抑,加上大龄产妇的缘故,素秋没能保住肚子里的孩子,就在复婚一周后,素秋不幸小产了。更戏剧性的是,就在素秋小产的当日,第三者找到佳华,告诉佳华自己也有孕在身,佳华当时一心照顾着素秋,并未搭理小三。</p><p class="calibre6">后来,素秋出院后,佳华对她坦白了这件事,素秋并未说什么。事实上,这个时候,小三也已经结婚了,在素秋和佳华闹离婚的前三个月,第三者跟自己多年的男友结婚领了证,但她并没有就此放弃纠缠佳华,甚至还曾经提出想和佳华一起拍结婚照的想法。佳华同意了小三的请求,也明确表明只会给小三表面上想要的东西,不可能离婚娶她。</p><p class="calibre6">之后,很长一段时间,佳华表示没有再跟第三者联系了,素秋心里却不相信,即便佳华对她很好,素秋心里也总是怀疑佳华是不是又去跟小三联系了,因愧疚才对自己好的。有时候,佳华加班回家很晚,素秋就会想,他是不是去见第三者了,或者佳华在距离自己较远的地方接电话、看信息,素秋也会猜测是不是跟第三者有关。</p><p class="calibre6">这样的生活,对两个人都是一种折磨。素秋提议想要跟第三者面谈一次,于是三个人一起见了一面,佳华和第三者都表示不会再联系,感情已经断了。</p><p class="calibre6">可是这种表面上的保证并未真的消除素秋的心理压力。</p><p class="calibre6">随后,第三者的老公应该也知道了妻子出轨当小三的事实,两个人分居了。得知佳华和素秋二人离婚后又复婚,小三心里应该也是极度不舒服的。前不久,第三者出了一次车祸,打电话给佳华,把自己说得很可怜,考虑到她怀孕了,素秋决定和佳华一起去看看她。</p><p class="calibre6">去的路上,素秋收到了第三者的挑衅短信,表明自己就是要跟佳华在一起,素秋心里很生气,于是故意挽着佳华的手去见第三者。</p><p class="calibre6">到了医院后,他们却发现第三者并没有怀孕,小三解释说前几天打掉了,素秋对这件事并没有什么太大的触动,索性未理。看到这个照片中的女人活生生地站在自己面前,素秋的心情是很复杂的,碍于对方尚在养伤,她按捺住自己的脾气没有发作。不料,小三却拉着佳华的手痛哭流涕地诉说自己多么可怜多么无助,佳华也任由她拉着自己的手,一动不动。素秋拉了几次,也没有分开,她生气地走出门外。后来医生都出来后,素秋走进病房,看见佳华背着手,跟小三保持了一定的距离,但他对素秋的出现明显有一丝不满。</p><p class="calibre6">离开病房后,夫妻两个人在路上的气氛有些沉重,佳华一直在电话里跟人谈论公司的事情,语气非常不好,素秋隐隐觉得佳华对她有怨气。</p><p class="calibre6">这天晚上到了家里,两个人也没有太多的话可说,背对背地睡着,素秋心里有种同床异梦的感觉,很不是滋味。</p><p class="calibre6">这一夜两个人各怀心事,次日一大早,素秋醒过来,试图牵佳华的手,佳华却故意躲开了。素秋心里很受伤,感觉佳华在见到第三者后,内心有些动摇。她不知道该怎样和佳华进行下去……</p><p class="calibre6">我们先来看素秋最渴望解决的问题,那就是如何能够让佳华跟小三彻底断绝关系。</p><p class="calibre6">这个第三者口口声声表示自己一定要和佳华在一起,那么她是为了爱吗?答案显然不是。我们都知道感情是排他的,是自私的,是容不得对方心里还有其他人存在的。在第三者说自己怀孕、车祸住院的时候,佳华还是选择陪伴在妻子素秋身边,号称自己是“真爱”的第三者怎么可能忍受得了?</p><p class="calibre6">在交谈中,我得知小三曾经在佳华的公司任职,事业有成的佳华不仅在经济上能够满足她,工作上也能让她得到许多的便利。这也是第三者选择勾引佳华的最初目的。后来佳华明确表示自己不会娶她,她可能开始觉得自己会被抛弃,于是便采取了一些极端的做法,例如,谎称自己有孕。</p><p class="calibre6">为什么我要说第三者是撒谎呢?原因很简单。佳华是想要二胎的,在素秋孩子没能保住后,佳华的内心或许已经有些崩溃了,因此第三者企图用孩子来迷惑佳华,若是真有孕,她必然会直接拿着化验单,挺着肚子来找佳华,或者将化验单拍照发给佳华看,而不只是口头消息。</p><p class="calibre6">小三只是为了金钱,想必佳华内心多多少少也有些明白。他和素秋相识于微时,到现在家庭才富裕起来,两个人一路走过很多艰辛,因此感情是很深厚的。素秋个性刚强稳重,小三年轻活泼,所以佳华能够在小三身上弥补在素秋那里得不到的心理缺失。</p><p class="calibre6">根据这些特征,我指出了素秋在婚姻中的一些问题,并给出了解决方案。</p><p class="calibre6">1.问题所在</p><p class="calibre6">(1)情商较低。缺乏恋爱经验的素秋在感情中一向是很被动的,因此她不知道如何主动对佳华展示温柔细腻的一面。</p><p class="calibre6">(2)敏感多疑。素秋经常怀疑佳华,这对佳华来说是一种折磨。</p><p class="calibre6">(3)情绪管理。在自己不开心、烦躁的时候,素秋将脾气发在了佳华身上,实际上这是将佳华推给第三者的一种间接做法。</p><p class="calibre6">2.挽回方案</p><p class="calibre6">(1)思路。</p><p class="calibre6">① 学会管理情绪。克制自己的脾气是关键,素秋必须先要做到这一点。</p><p class="calibre6">② 沟通。良好的沟通是改善关系的重中之重。很多时候,我们看到的问题,其根本都是双方的误解。</p><p class="calibre6">③ 了解丈夫的心理。素秋的强势和坏脾气,使得佳华很多话都不敢跟素秋说,案例中佳华也说过,他之所以会跟小三在一起,最初就是因为“第三者对他很崇拜,无论他怎样发脾气,小三都能容忍”,因此素秋得学会聆听佳华的内心。</p><p class="calibre6">(2)步骤。</p><p class="calibre6">① 积极调整自己的风格,从穿衣到言谈举止,都柔软下来,让丈夫感受到女性的柔美。</p><p class="calibre6">② 增加彼此的弹性空间,不要咄咄逼人,给丈夫留有余地。</p><p class="calibre6">③ 在发生冲突时,保持冷静,学会管理情绪,超越自己性格上的局限,但也要释放情绪,例如素秋可以购买自己喜欢的物品来缓解压力。</p><p class="calibre6">④ 学会管理好自己的睡眠,和自己的身体对话,把重点放在心灵家园的建设上,要认识到自己并非受害者。一段感情的腐坏,双方都有责任,佳华会出轨,素秋也应该找找自身的原因。</p><p class="calibre6">⑤ 任何时候,自己对当下都有选择权,可以选择结束或继续,但重点还是要问问自己的内心。</p><p class="calibre6">素秋的领悟能力很好,我说的这些她都一一照做了。起初,她还有些不适应,佳华的工作很忙,时常加班,我便建议她可以选择陪伴佳华。夜里佳华工作的时候,素秋就在旁边陪着他。过了几天,素秋跟我说他们之间的关系好多了。转折点就在一个晚上。</p><p class="calibre6">那天夜里佳华一下班就忙着在客厅回邮件,处理公事。素秋拿了一本书,坐在距离佳华不远处安静地看着。之后,佳华回完邮件,在电脑上看新闻没说话,素秋默默走过去,抱了抱他,佳华还是没反应,素秋便躺在他的腿上睡着了。佳华把她摇醒,两个人一起回了卧室,但是佳华仍旧没有睡觉,素秋也没多说什么,自己抱着佳华就睡着了。</p><p class="calibre6">早上醒来的时候,她发现佳华抱着自己睡得很安稳。</p><p class="calibre6">素秋跟我说到这个事情的时候显得很开心,她之前很少主动对佳华做一些亲密的举动,尤其是在两个人闹别扭的时候,这次的尝试,让她发现佳华是需要自己安慰和鼓励的。</p><p class="calibre6">之后的一段时间,素秋都没有在佳华面前提及小三,也没有问他关于第三者的任何问题,在夫妻生活上也会主动一些,这些改变让素秋觉得两个人好像更近了一些,性生活也较之前更加和谐了。</p><p class="calibre6">于是,我立刻又给了素秋三条建议:</p><p class="calibre6">(1)重塑自己,既然已经了解到了自己的阴影和弱点,就要学会扬长避短,多发挥自己的长处,收敛自己不好的地方。</p><p class="calibre6">(2)有时间的情况下,让佳华陪同自己去商场选购衣物。一来促进夫妻感情,二来可以了解到佳华的审美和期待。</p><p class="calibre6">(3)彻底淡忘小三事件,微笑面对未来,既往不咎,不翻旧账。</p><p class="calibre6">素秋和佳华的核心关系处理好了,第三者那边自然就会终结。没过多久,素秋穿着佳华给她买的长裙和佳华出去旅游了一趟,回来后,素秋告诉我佳华直接给她买了一套价值千万的房子,并且还当着素秋的面给小三打了电话,表示从此之后再也不与她有任何的联络。</p><p class="calibre6">三个月后的回访,素秋说她再也没在佳华的通信录上看见第三者的名字,也没有听到他们之间有来往,只是她现在心里仍有一些不舒服。</p><p class="calibre6">这是正常的。</p><p class="calibre6">出轨是最消耗夫妻感情的。接下来的日子,素秋需要做的是治愈心灵的创伤,并学会信任对方。人生还有很多功课需要做,生活也仍旧会继续,但是通过这次谈话,我明显地感到,素秋变得更加强大了。</p><p class="calibre6">前期,我们在联系的时候,素秋常常泣不成声,一边诉说自己和佳华的不容易,一边愤恨第三者为何阴魂不散,而这一次,素秋很冷静地表示,她需要一段时间,好好思考和佳华的未来,她到底想要怎样的未来。我相信,不管是怎样的选择,素秋都不会如同当初那样无助和绝望,因为她已经明白人生该由自己来负责。</p><p class="calibre6">抛开案例,我们接下来再客观聊一聊出轨之后的婚姻问题。</p><p class="calibre6">一般提到另一半出轨,许多人都会咬牙切齿地表明自己绝不容忍,必须离婚。可是,实际上,真的能够做到这样的能有几人?</p><p class="calibre6">离婚的成本有多高?离婚之后的潜在风险有多高?那种一看到对方配偶出轨,就立刻斩钉截铁地要求对方离婚的,麻烦你也站在对方的立场想想看。出轨不是世界末日,生命也不会就此结束,之后的人生,还有很长一段路需要走。</p><h4 class="sigil_not_in_toc">走出出轨阴影,重建婚姻美好未来</h4><p class="calibre6">不要因为一件事就否定一个人的所有,更不要被你内心的愤怒牵引着失去你的方向。面对出轨,我们首先要做的便是放下自己的怨气,冷静思考衡量后,再来做决定。一时冲动做出的决定,并不一定就是正确的。当然,那种情况恶劣的家暴出轨,最好还是离婚。坦白来讲,从出轨事件中恢复过来,是一个漫长而又艰难的过程。可是,挽回这段感情,也并不是不可以。在此,提出一个可缓慢进展的行动步骤,希望可以让你们之间的“伤痕”愈合得更快些。</p><p class="calibre6">1.勇于承担,诚实面对</p><p class="calibre6">出轨者既然做了这样一件对不起伴侣的事情,那么就要立即对自己的行为负责,要立刻结束不正当的婚外情关系,终止跟第三者的任何联络。不管有多么难以启齿,也要对伴侣说清楚,并做出勇敢承担后果的行为举动。其伴侣也要清楚,这件事是真实地发生了,逃避和装聋作哑不能解决问题,必须正视现实。</p><p class="calibre6">2.考虑共同期望值,一起度过感情艰难期</p><p class="calibre6">接受并原谅出轨,可能需要花费相当长的一段时间。两个人要一起梳理一下过去发生的种种,并考虑婚姻是否能继续下去。若是双方都愿意再次共同生活在一起,也需要明白恢复的过程将要投入的时间和精力。两个人都要给彼此一个缓冲的空间,尽量用宽容的态度去面对对方。</p><p class="calibre6">3.咨询情感专家,重建信任</p><p class="calibre6">可能在这个过程中,你会有很多迷茫以及不满或是绝望。可以尝试向专业的情感咨询师寻求帮助,他们会以专业的态度,来帮助你们度过这一段难熬的日子。只要坚定彼此对婚姻的承诺,相信你们最终能各自找到一个合适的契合点,来共同修复婚姻关系中的裂痕。</p><p class="calibre6">假如你是出轨者,在改善彼此关系的过程中,可能会因为内心的愧疚而变得焦虑不安,但你也该明白,让你的伴侣按照自己的意向去解开心结,才是最重要的。</p><p class="calibre6">假如你是被出轨者,你可能会因为不满和失望而心灰意冷,但你要知道,这个人是你选择携手一生的,现在TA犯了错误,你应该给TA一个机会去改正。</p><p class="calibre6">4.学会互相原谅,展望美好未来</p><p class="calibre6">出轨,往往会导致受害方的情绪失控。所以在短时间内,你们之间想要和好如初是不可能的。不过,随着时间的流逝,这些情绪都是可以逐渐淡化的,谅解也会变得越来越容易。出轨者要包容对方这段时间有些神经质的脾气,被出轨者内心也要尽量放下对对方背叛的厌恶。另外,并非所有出轨的婚姻都能够或者应该去挽回。有时候伤口也会因为太深,而发展到难以弥合的地步。然而,如果两个人都能全身心地投入到关系的重建中,并且有决心、有毅力,那么付出的努力肯定是能够得到回报的,你们之间的感情也会得到再次升华。</p><p class="calibre6">诚然,很多事情说则容易做则难。其中关键可能跟每个人的性格有关,还有就是与宽容度有关。但不论哪种情况,要想让婚姻继续下去,并回到以前的幸福时光,就必须要做到谅解对方,不要反复纠结出轨这件事,否则你的婚姻不会毁在出轨上,而是会毁在你的过度纠结上。人生漫漫,谁都有可能犯错误,也并非所有的出轨都是不可饶恕的。夫妻间要经常进行良性沟通,多站在对方角度去思考问题。</p><p class="calibre6">对爱情最好的回报是婚姻,对婚姻最好的回报是珍惜,懂得感恩,学会宽容,珍惜拥有。</p><h3 class="calibre8" id="sigil_toc_id_58">你不是一个人在战斗</h3><p class="calibre6">(1)电子邮件、聊天记录。</p><p class="calibre6">(2)保证书或悔过书。</p><p class="calibre6">(3)照片。</p><p class="calibre6">(4)视频。</p><p class="calibre6">(5)音频。</p><p class="calibre6">TIPS</p><div class="sgc-toc-level1" id="calibre_pb_7"></div>
</body>
</html>
2.3.2.1 技巧1:使用concat()方法将两个xpath表达式的结果合并
将下面这两个标题合并
from lxml import etree# 使用etree.parse()方法解析HTNL文档
html = etree.parse('part0015.html', etree.HTMLParser())
result = html.xpath('concat(//*[@id="4OIQ0-150a091a172f42b696e48e6fa0fd8b4c"]/h4[2]/text(),//*[@id="sigil_toc_id_57"]/text())')
# result = html.xpath('//*[@id="4OIQ0-150a091a172f42b696e48e6fa0fd8b4c"]/h4[2]/text()')
print(result)
2.3.2.2 技巧2:使用last()方法从筛选出的标签列表的末尾开始提取标签
from lxml import etree# 使用etree.parse()方法解析HTNL文档
html = etree.parse('part0015.html', etree.HTMLParser())
result = html.xpath('//*[@id="4OIQ0-150a091a172f42b696e48e6fa0fd8b4c"]/h4[last()]/text()')
print(result)
2.3.2.3 技巧3:使用contains的用法,匹配含有指定文本的标签
from lxml import etree
html = etree.parse('part0015.html', etree.HTMLParser())
result = html.xpath('//h4[contains(@class, "sigil_not_in_toc")]/text()')
print(result)
划重点:
1.搜索含有文字(根据对应文本搜索)为:“如何”的h4节点,可以使用:
from lxml import etree
html = etree.parse('part0015.html', etree.HTMLParser())
result = html.xpath('//h4[contains(text(),"如何")]/text()')
print(result)
2.根据属性定位节点,搜索:
from lxml import etree
html = etree.parse('part0015.html', etree.HTMLParser())
result1 =html.xpath('//h3[contains(@class, "calibre8")]/text()')
print(result1)
2.3.2.4 总结(什么?还没懂 )
Xpath 解析九步走
1.初始化html
etree.parse()是初始化html构造一个XPath解析对象;
etree.tostring()是修复html文件中代码,把缺的头或尾节点补齐;
result.deode(‘utf-8’)修复后的HTML代码是字节类型,转化成字符串;
from lxml import etreedhtml=etree.parse('c:/.../part0015.html',etree.HTMLParser())
result=etree.tostring(html)
result.decode('utf-8')
2.获取所有节点
html.xpath('//*') //获取所有的节点
html.xpath('//li') //获取所有li节点
注:
Xpath规则一般用 // 开头
3.子节点、子孙节点
html.xpath('//li/a') //所有li下是所有直接a子节点
html.xpath('//li//a') //所有li下的子孙a节点
4.父节点
html.xpath('//a[@href="links.html"]/../@class')//找到所有a节点中href为links.html的父节点的class值
// .. 来实现查找父节点
5.属性匹配
html.xpath('//li[@class="item"]') //找到class值为item的节点
6.文本获取
html.xpath('//li[@class="item"]/a/text()')
#或html.xpath('//li[@class="item"]//text()')
#同理
html.xpath('//a[@id='id1']/a/text()')
#html.xpath('//a[@id='id1']/text()')
7.属性获取
html.xpath('//li/a/@href') //找到li下a中的href属性值
8.属性多值匹配(只要节点属性class中包含li就能匹配出来)
html.xpath('//li[contains(@class,"li")]/a/text()')
9.多属性匹配(匹配节点属性class值为li,name值为item的节点)
html.xpath('//li[contains(@class,"li") and @name="item"]/a/text()')
2.4 实战
import requests
import parsel
import csvdef getdata(url):headers = {"user-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"}response = requests.get(url=url, headers=headers)response.encoding = response.apparent_encodingselector = parsel.Selector(response.text) # 把字符串类型转化为对象lis = selector.xpath('//ul[@class="plcCitylist"]/li')for li in lis:city_names = li.xpath('./h3/a/text()').get()city_names = city_names.rstrip()number_people = li.xpath('./p[2]/text()').get()place_hot = li.xpath('./p[@class="pois"]/a/text()').getall()place_hot = [place.strip() for place in place_hot]place_hot = '、'.join(place_hot)place_url = li.xpath('./p[@class="pics"]/a/@href').get()img_url = li.xpath('./p[@class="pics"]/a/img/@src').get()print(city_names, number_people, place_url, img_url, place_hot, sep='|')with open('qiongyouData.csv', mode='a', encoding='utf-8', newline='') as file_object:csv_write = csv.writer(file_object)csv_write.writerow([city_names, number_people, place_url, img_url, place_hot])def main():for i in range(1, 172):url = "https://place.qyer.com/china/citylist-0-0-{}/".format(str(i))getdata(url)if __name__ == '__main__':main()
三、pyquery 解析(这个不常用,平常用Xath多一点)
1.安装和初始化
1.在cmd控制台中输入以下代码来使用pip安装pyquery库
pip install pyquery
像BeautifulSoup一样,初始化pyquery的时候,也需要传入一个HTML文本来初始化一个pyQuery对象。它的初始化的方式有很多,比如直接传入字符串,传入URL,传入文件名等等。
2.字符串的初始化
from pyquery import PyQuery as pq# 将字符串初始化为pyquery对象
html = '''<body>
<header id="header"><h3 id="name">小鱼儿与花无缺</h3><title>标题</title><div class="sns"><a class="a-current-menu-item" href="http://www.mytieba.com/feed/" target="_blank" rel="nofollow" title="RSS">a_test</a><a class="a-current-menu-item" href="http://mytieba.com/mytieba" target="_blank" rel="nofollow" title="Weibo">b_test</a><a href="https://www.mytieba.com/in/mytieba" target="_blank" rel="nofollow" title="Linkedin">c_test</a><a href="mailto:mytieba@gmail.com" target="_blank" rel="nofollow" title="envelope">d_test</a>;<f><!--This is a comment--></f><c>This is not a comment</c></div><div class="nav"><ul><li class="current-menu-item"><a href="http://www.mytieba.com/">hello</a></li>
<li><a href="http://www.mytieba.com/about-me/">word</a></li>
<li><a href="http://www.mytieba.com/post-search/">nihao</a></li>
<li><a href="http://www.mytieba.com/wp-login.php">kkb</a></li>
</ul> </div>
</header>
</body>
'''
doc = pq(html)
print(doc('li'))
2.pyquery的使用(以后再写)
3.总结
1.初始化:
(1)字符串初始化:
html=''' *******'''
from pyquery import PyQuery as pq
doc=pq(html)
print(doc('li'))
(2)URL初始化
doc=pq(url=" https:/ ... ")
(3)文件初始化
doc=pq(filename='demo.html')
print(doc(li))
2.基本css选择器(id 为container,class为list下的所有li)
doc('#container .list li')
3.查找节点
(1)子孙节点、子节点
.find():查找所有子孙节点
items=doc('.list')
items.find('li').children():查找子节点
items=doc('.list')
items.children('.active')(2)父节点
doc=pq(html)
items=doc('.list')
items.parent()
祖先节点
items.parents()(3)兄弟节点
doc=pq(html)
li=doc('.lsit .item-0.active')
li.siblings('.active')
4.遍历(用items()函数生成列表生成器进行遍历)
doc=pq(html)
lis=doc('li').items()
for li in lis:print(li)
5.获取信息
(1)获取属性
a=doc('.item-0.active a')
print(a.attr('href'))或print(a.attr.href)
特:attr只会输出第一个a节点属性,要用items()遍历(2)获取文本
.text()
a=doc('.item-0.active a')
a.text() //text()函数会输出所有的li文本内容.html()
li=doc('li')
li.html() //html()只会输出第一个li节点内的HTML文本
6.节点操作
(1) removeClass addClass
li=doc('.item-0.active')
print(li)
li.removeClass('active') //移除active的class
li.addClass('active') //增加active的class(2) attr text html
li.attr('name','link') //增加属性name=link
li.text('changed item') //改变文本 changed item
li.html(<span>changed item </span>) //改变HTML(3) remove()
wrap=doc('.wrap')
wrap.find('p').remove() //删除wrap中p节点
wrap.text()
注:
选择第一个节点,最后一个节点,奇偶数节点,包含某一文本节点
解析库的基本使用(BeautifulSoup、Xpath(重点)、PyQuery)相关推荐
- Python_爬虫_BeautifulSoup网页解析库
BeautifulSoup网页解析库 from bs4 import BeautifulSoup 0.BeautifulSoup网页解析库包含 的 几个解析器 Python标准库[主要,系统自带;] ...
- python pyquery_python3解析库pyquery
pyquery是一个类似jquery的python库,它实现能够在xml文档中进行jQuery查询,pyquery使用lxml解析器进行快速在xml和html文档上操作,它提供了和jQuery类似的语 ...
- 爬虫(2)-解析库xpath和beautifulsoup爬取猫眼电影排行榜前100部电影
解析库爬取猫眼电影前100部电影 认为有用的话请点赞,码字不易,谢谢. 其他爬虫实战请查看:https://blog.csdn.net/qq_42754919/category_10354544.ht ...
- 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库
1.正则表达式 爬虫的四个主要步骤: 明确目标(要知道你准备取哪个范围或者网站上取搜索) 爬(将所有网站的内容全部爬下来) 取(取掉对我们没用的数据) 处理数据(按照我们想要的方式存储和使用) 什么是 ...
- 浅谈解析库XPath,bs4和pyquery
<浅谈解析库XPath,bs4和pyquery> 作者:墨非墨菲非菲 前几天在CSDN看到一篇帖子,题目是"如何让自己像打王者一样发了疯,拼了命,石乐志的学习".这里面 ...
- 网页爬虫之页面解析-BeautifulSoup/XPath/pyquery使用
网页爬虫之页面解析 内容摘要 Beautiful Soup的使用 节点选择 数据提取 XPath的使用 节点选择 数据提取 pyquery的使用 节点选择 数据提取 Beautiful Soup.XP ...
- python3 beautifulsoup 表格_[Python3爬虫]Beautiful Soup解析库
解析库与Beautiful Soup 通过request库,我们已经能够抓取网页信息了,但要怎么提取包含在Html代码里面的有效信息呢?谈到匹配有效信息你肯定会想到正则表达式,这里就不讨论了,实际上关 ...
- BeautifulSoup解析库详解
BeautifulSoup是灵活又方便的网页解析库,处理高效,支持多种解析器 利用它不用编写正则表达式即可方便地实现网页信息的提取 安装:pip3 install beautifulsoup4 用法详 ...
- beautifulsoup解析动态页面div未展开_两个资讯爬虫解析库的用法与对比
" 阅读本文大概需要 10 分钟. " 舆情爬虫是网络爬虫一个比较重要的分支,舆情爬虫往往需要爬虫工程师爬取几百几千个新闻站点.比如一个新闻页面我们需要爬取其标题.正文.时间.作者 ...
- xpath解析库的语法及使用
文章目录 1.xpath解析库 2.xpath语法 3.案例: 豆瓣电影的相关信息 1.xpath解析库 # Xpath解析库介绍:数据解析的过程中使用过正则表达式, 但正则表达式想要进准匹配难度较高 ...
最新文章
- 博士笔记 | 深入理解深度学习语义分割
- Draw Call未被批处理?在Unity 5.6中如何查找原因
- 学习Git_12.10
- java filter init param_javaweb中的过滤器学习(3)---Filter的部署详细总结
- engineering department induction ppt
- 初步了解并使用正则表达式 (REGular EXPression)
- [vue] 组件中写name选项有什么作用?
- 面试基操:MQ怎么保障消息可靠性?
- LeetCode 404. Sum of Left Leaves
- linux PHP卸载不了
- Java是有法_Java基础语法
- 12306订票助手秘笈:2013春节我要回家
- c++矩阵库eigen的使用方法
- Unity音频可视化插件
- GitHub项目推荐
- Mina中的支付交易snark
- 计算机网络的发展过程大致可以分为几个,计算机网络发展过程分几个阶段
- 苹果原装转接头不能连html,变革之际 iPhone 7P原装lightning耳机及转接头拆解
- C语言学习经典书籍推荐
- mysql 原子操作