数据解析之bs4

bs4数据解析的原理

bs4只可以应用在python中

1、实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中
2、通过调用BeautifulSoup对象相关的属性和方法进行标签定位和数据提取

环境安装:

  • pip install bs4
  • pip install lxml

如何实例化BeautifulSoup对象?

bs对象 = BeautifulSoup(要解析的文本,解析器)
第一个参数必须是字符串类型的值或变量
第二个解析器,常用的有‘html.parser’, 'lxml'

  1. 导包 from bs4 import BeautifulSoup
  2. 对象的实例化
    -1)本地html文档中数据加载到该对象中:打开文件并读取
fp=open('文件路径','r',encoding='utf-8') 
soup = BeautifulSoup(fp,‘lxml’)

-2)互联网上获取的页面数据加载到该对象中

page_text=response.text
soup = BeautifulSoup(page_text,‘lxml’) → BeautifulSoup对象

BeautifulSoup对象相关属性与方法

1、soup.tagname:返回html中第一次出现的tagname标签,返回的是Tag对象
2、soup.find(标签,属性):提取满足要求的第一个数据,返回的是Tag对象
- soup.find('tagname'):等同于soup.tagname
- soup.find('tagname',属性),例如soup.find(‘div’,class_/id/attr=’’)
3、soup.find_all(标签,属性):提取满足要求的所有数据(Tag对象的列表)
4、soup.select('')
- soup.select('某一种选择器,如类选择器/id选择器/标签…选择器'),返回列表,所有满足要求数据
- 层级选择器:
1)soup.select('div > ul > li > a') 返回所有满足要求数据的列表,>表示一个层级
2)soup.select('div > ul a') 返回所有满足要求数据的列表,空格 表示多个层级

Tag对象相关属性与方法

1、获取标签的文本数据:soup.tagename.text/string/get_text()
- text/get_text():可获取某一个标签中所有的文本内容,包括子标签内的文本内容
- string:只可获得该标签的文本内容,不能提取子标签的文本内容
2、获取标签中的属性值:soup.tagname['属性名']

在这里插入图片描述
在这里插入图片描述

实战练习

需求:爬取三国演义小说所有的章节标题和章节内容,网址:https://www.shicimingju.com/book/sanguoyanyi.html

import requests
from bs4 import BeautifulSoup
# 爬取首页
url='https://www.shicimingju.com/book/sanguoyanyi.html'
headers={
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36'
}
page_res = requests.get(url,headers=headers)
page_res.encoding='utf-8' #一开始爬取内容为乱码,故对response对象指定编码
page_data=page_res.text
# 在首页中解析出章节的标题和详情页的url
page_soup = BeautifulSoup(page_data,'lxml')
a_list=page_soup.find('div',class_='book-mulu').find_all('a')
# a_list = page_soup.select('.book-mulu > ul a')
fp = open('./sanguoyanyi.txt','w',encoding='utf-8') #写入同一个文件
for a in a_list:
    title = a.string.replace(' ','').replace('\n','')
    detail_url = 'https://www.shicimingju.com' + a['href']
    # 对详情页发起请求,解析章节内容
    detail_res = requests.get(detail_url,headers=headers)
    detail_res.encoding='utf-8'
    detail_text=detail_res.text
    content_soup = BeautifulSoup(detail_text,'lxml')
    content = content_soup.find('div',class_='chapter_content').text.replace(' ','').replace('\n','')
    # 存储
    fp.write(title+':\n'+content+'\n')
    print(title + 'OVER!!!')
第一回·宴桃园豪杰三结义斩黄巾英雄首立功OVER!!!
第二回·张翼德怒鞭督邮何国舅谋诛宦竖OVER!!!
第三回·议温明董卓叱丁原馈金珠李肃说吕布OVER!!!
第四回·废汉帝陈留践位谋董贼孟德献刀OVER!!!
第五回·发矫诏诸镇应曹公破关兵三英战吕布OVER!!!
第六回·焚金阙董卓行凶匿玉玺孙坚背约OVER!!!
第七回·袁绍磐河战公孙孙坚跨江击刘表OVER!!!
第八回·王司徒巧使连环计董太师大闹凤仪亭OVER!!!
第九回·除暴凶吕布助司徒犯长安李傕听贾诩OVER!!!
第一十回·勤王室马腾举义报父仇曹操兴师OVER!!!
第十一回·刘皇叔北海救孔融吕温侯濮阳破曹操OVER!!!
第十二回·陶恭祖三让徐州曹孟德大战吕布OVER!!!
第十三回·李傕郭汜大交兵杨奉董承双救驾OVER!!!
第十四回·曹孟德移驾幸许都吕奉先乘夜袭徐郡OVER!!!
第十五回·太史慈酣斗小霸王孙伯符大战严白虎OVER!!!
第十六回·吕奉先射戟辕门曹孟德败师淯水OVER!!!
第十七回·袁公路大起七军曹孟德会合三将OVER!!!
第十八回·贾文和料敌决胜夏侯惇拔矢啖睛OVER!!!
第十九回·下邳城曹操鏖兵白门楼吕布殒命OVER!!!
第二十回·曹阿瞒许田打围董国舅内阁受诏OVER!!!
第二十一回·曹操煮酒论英雄关公赚城斩车胄OVER!!!
第二十二回·袁曹各起马步三军关张共擒王刘二将OVER!!!
第二十三回·祢正平裸衣骂贼吉太医下毒遭刑OVER!!!
第二十四回·国贼行凶杀贵妃皇叔败走投袁绍OVER!!!
第二十五回·屯土山关公约三事救白马曹操解重围OVER!!!
第二十六回·袁本初败兵折将关云长挂印封金OVER!!!
第二十七回·美髯公千里走单骑汉寿侯五关斩六将OVER!!!
第二十八回·斩蔡阳兄弟释疑会古城主臣聚义OVER!!!
第二十九回·小霸王怒斩于吉碧眼儿坐领江东OVER!!!
第三十回·战官渡本初败绩劫乌巢孟德烧粮OVER!!!
第三十一回·曹操仓亭破本初玄德荆州依刘表OVER!!!
第三十二回·夺冀州袁尚争锋决漳河许攸献计OVER!!!
第三十三回·曹丕乘乱纳甄氏郭嘉遗计定辽东OVER!!!
第三十四回·蔡夫人隔屏听密语刘皇叔跃马过檀溪OVER!!!
第三十五回·玄德南漳逢隐沧单福新野遇英主OVER!!!
第三十六回·玄德用计袭樊城元直走马荐诸葛OVER!!!
第三十七回·司马徽再荐名士刘玄德三顾草庐OVER!!!
第三十八回·定三分隆中决策战长江孙氏报仇OVER!!!
第三十九回·荆州城公子三求计博望坡军师初用兵OVER!!!
第四十回·蔡夫人议献荆州诸葛亮火烧新野OVER!!!
第四十一回·刘玄德携民渡江赵子龙单骑救主OVER!!!
第四十二回·张翼德大闹长坂桥刘豫州败走汉津口OVER!!!
第四十三回·诸葛亮舌战群儒鲁子敬力排众议OVER!!!
第四十四回·孔明用智激周瑜孙权决计破曹操OVER!!!
第四十五回·三江口曹操折兵群英会蒋干中计OVER!!!
第四十六回·用奇谋孔明借箭献密计黄盖受刑OVER!!!
第四十七回·阚泽密献诈降书庞统巧授连环计OVER!!!
第四十八回·宴长江曹操赋诗锁战船北军用武OVER!!!
第四十九回·七星坛诸葛祭风三江口周瑜纵火OVER!!!
第五十回·诸葛亮智算华容关云长义释曹操OVER!!!
第五十一回·曹仁大战东吴兵孔明一气周公瑾OVER!!!
第五十二回·诸葛亮智辞鲁肃赵子龙计取桂阳OVER!!!
第五十三回·关云长义释黄汉升孙仲谋大战张文远OVER!!!
第五十四回·吴国太佛寺看新郎刘皇叔洞房续佳偶OVER!!!
第五十五回·玄德智激孙夫人孔明二气周公瑾OVER!!!
第五十六回·曹操大宴铜雀台孔明三气周公瑾OVER!!!
第五十七回·柴桑口卧龙吊丧耒阳县凤雏理事OVER!!!
第五十八回·马孟起兴兵雪恨曹阿瞒割须弃袍OVER!!!
第五十九回·许诸裸衣斗马超曹操抹书问韩遂OVER!!!
第六十回·张永年反难杨修庞士元议取西蜀OVER!!!
第六十一回·赵云截江夺阿斗孙权遗书退老瞒OVER!!!
第六十二回·取涪关杨高授首攻雒城黄魏争功OVER!!!
第六十三回·诸葛亮痛哭庞统张翼德义释严颜OVER!!!
第六十四回·孔明定计捉张任杨阜借兵破马超OVER!!!
第六十五回·马超大战葭萌关刘备自领益州牧OVER!!!
第六十六回·关云长单刀赴会伏皇后为国捐生OVER!!!
第六十七回·曹操平定汉中地张辽威震逍遥津OVER!!!
第六十八回·甘宁百骑劫魏营左慈掷杯戏曹操OVER!!!
第六十九回·卜周易管辂知机讨汉贼五臣死节OVER!!!
第七十回·猛张飞智取瓦口隘老黄忠计夺天荡山OVER!!!
第七十一回·占对山黄忠逸待劳据汉水赵云寡胜众OVER!!!
第七十二回·诸葛亮智取汉中曹阿瞒兵退斜谷OVER!!!
第七十三回·玄德进位汉中王云长攻拔襄阳郡OVER!!!
第七十四回·庞令明抬榇决死战关云长放水淹七军OVER!!!
第七十五回·关云长刮骨疗毒吕子明白衣渡江OVER!!!
第七十六回·徐公明大战沔水关云长败走麦城OVER!!!
第七十七回·玉泉山关公显圣洛阳城曹操感神OVER!!!
第七十八回·治风疾神医身死传遗命奸雄数终OVER!!!
第七十九回·兄逼弟曹植赋诗侄陷叔刘封伏法OVER!!!
第八十回·曹丕废帝篡炎刘汉王正位续大统OVER!!!
第八十一回·急兄仇张飞遇害雪弟恨先主兴兵OVER!!!
第八十二回·孙权降魏受九锡先主征吴赏六军OVER!!!
第八十三回·战猇亭先主得仇人守江口书生拜大将OVER!!!
第八十四回·陆逊营烧七百里孔明巧布八阵图OVER!!!
第八十五回·刘先主遗诏托孤儿诸葛亮安居平五路OVER!!!
第八十六回·难张温秦宓逞天辩破曹丕徐盛用火攻OVER!!!
第八十七回·征南寇丞相大兴师抗天兵蛮王初受执OVER!!!
第八十八回·渡泸水再缚番王识诈降三擒孟获OVER!!!
第八十九回·武乡侯四番用计南蛮王五次遭擒OVER!!!
第九十回·驱巨善六破蛮兵烧藤甲七擒孟获OVER!!!
第九十一回·祭泸水汉相班师伐中原武侯上表OVER!!!
第九十二回·赵子龙力斩五将诸葛亮智取三城OVER!!!
第九十三回·姜伯约归降孔明武乡侯骂死王朝OVER!!!
第九十四回·诸葛亮乘雪破羌兵司马懿克日擒孟达OVER!!!
第九十五回·马谡拒谏失街亭武侯弹琴退仲达OVER!!!
第九十六回·孔明挥泪斩马谡周鲂断发赚曹休OVER!!!
第九十七回·讨魏国武侯再上表破曹兵姜维诈献书OVER!!!
第九十八回·追汉军王双受诛袭陈仓武侯取胜OVER!!!
第九十九回·诸葛亮大破魏兵司马懿入寇西蜀OVER!!!
第一百回·汉兵劫寨破曹真武侯斗阵辱仲达OVER!!!
第一百十一回·出陇上诸葛妆神奔剑阁张郃中计OVER!!!
第一百十二回·司马懿占北原渭桥诸葛亮造木牛流马OVER!!!
第一百十三回·上方谷司马受困五丈原诸葛禳星OVER!!!
第一百十四回·陨大星汉丞相归天见木像魏都督丧胆OVER!!!
第一百十五回·武侯预伏锦囊计魏主拆取承露盘OVER!!!
第一百十六回·公孙渊兵败死襄平司马懿诈病赚曹爽OVER!!!
第一百十七回·魏主政归司马氏姜维兵败牛头山OVER!!!
第一百十八回·丁奉雪中奋短兵孙峻席间施密计OVER!!!
第一百十九回·困司马汉将奇谋废曹芳魏家果报OVER!!!
第一百一十回·文鸯单骑退雄兵姜维背水破大敌OVER!!!
第一百一十一回·邓士载智败姜伯约诸葛诞义讨司马昭OVER!!!
第一百一十二回·救寿春于诠死节取长城伯约鏖兵OVER!!!
第一百一十三回·丁奉定计斩孙綝姜维斗阵破邓艾OVER!!!
第一百一十四回·曹髦驱车死南阙姜维弃粮胜魏兵OVER!!!
第一百一十五回·诏班师后主信谗托屯田姜维避祸OVER!!!
第一百一十六回·钟会分兵汉中道武侯显圣定军山OVER!!!
第一百一十七回·邓士载偷度阴平诸葛瞻战死绵竹OVER!!!
第一百一十八回·哭祖庙一王死孝入西川二士争功OVER!!!
第一百一十九回·假投降巧计成虚话再受禅依样画葫芦OVER!!!
第一百二十回·荐杜预老将献新谋降孙皓三分归一统OVER!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值