XPath解析数据
XPath简介
全称:XML Path Language
是一种小型的查询语言
是一门在XML文档中查找信息的语言
XPath的优点
可在XML中查找信息
支持HTML的查找
可通过元素和属性进行导航
XPath需要依赖lxml库
安装方式:
pip install lxml
爬取起点小说网使用XPath数据
import requests
from lxml import etree
url = 'https://www.qidian.com/rank/yuepiao'
#添加headers伪装成浏览器
headers= {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'}
#发送请求
resp = requests.get(url,headers)
#类型转换
e = etree.HTML(resp.text)
print(type(e))
names = e.xpath('//div[@class="book-mid-info"]/h2/a/text()')
print(names)
authors = e.xpath('//p[@class="author"]/a[1]/text()')
print(authors)
for name, author in zip(names, authors):
print(name,":",author)
输入结果:
<class 'lxml.etree._Element'>
['夜的命名术', '明克街13号', '不科学御兽', '视死如归魏君子', '我只想安静的做个苟道中人', '公子别秀', '星门', '灵境行者', '洪主', '家父汉高祖', '赤心巡天', '这个明星很想退休', '镜面管理局', '这游戏也太真实了', '轮回乐园', '我已不做大佬好多年', '择日飞升', '长夜余火', '终宋', '深空彼岸']
['会说话的肘子', '纯洁滴小龙', '轻泉流响', '平层', '爆炸小拿铁', '荣小荣', '老鹰吃小鸡', '卖报小郎君', '烽仙', '历史系之狼', '情何以甚', '幼儿园一把手', '横扫天涯', '晨星LL', '那一只蚊子', '萌俊', '宅猪', '爱潜水的乌贼', '怪诞的表哥', '辰东']
夜的命名术 : 会说话的肘子
明克街13号 : 纯洁滴小龙
不科学御兽 : 轻泉流响
视死如归魏君子 : 平层
我只想安静的做个苟道中人 : 爆炸小拿铁
公子别秀 : 荣小荣
星门 : 老鹰吃小鸡
灵境行者 : 卖报小郎君
洪主 : 烽仙
家父汉高祖 : 历史系之狼
赤心巡天 : 情何以甚
这个明星很想退休 : 幼儿园一把手
镜面管理局 : 横扫天涯
这游戏也太真实了 : 晨星LL
轮回乐园 : 那一只蚊子
我已不做大佬好多年 : 萌俊
择日飞升 : 宅猪
长夜余火 : 爱潜水的乌贼
终宋 : 怪诞的表哥
深空彼岸 : 辰东
BeautifulSoup的简介
BeautifulSoup
(直译:美味的汤)
是一个可以从HTML或XML文件中提取数据
的Python库。
其功能简单而强大,容错能力高,文档相对完善,清晰易懂。
非Python标准模块,需要安装才能使用。
安装方式
pip install bs4
测试方式
import bs4
BeautifulSoup 解析数据
解析器
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,
如果不安装第三方解析器,则Python会使用默认解析器。
示例
from bs4 import BeautifulSoup
html = '''
<html>
<head>
<title>mila</title>
</head>
<body>
<h1 class="mila-body nice-body">you make me so happy</h1>
<a href="https://www.bilibili.com/">哔哩哔哩</a>
<h2><!--注释--></h2>
</body>
</html>
'''
# bs = BeautifulSoup(html, 'html.parser')
bs = BeautifulSoup(html, 'lxml')
#获取标签
print(bs.title)
#获取h1标签的所有属性
print(bs.h1.attrs)
#获取单个属性
print(bs.h1.get('class'))
print(bs.h1['class'])
print(bs.a['href'])
#获取文本内容
print(bs.title.text)
print(bs.title.string)
#获取内容
print('------------',bs.h2.string)#获取到h2标签中的注释的文本内容
print(bs.h2.text)#因为h2标签中没有正儿八经的文本内容
BeautifulSoup的使用
BeautifulSoup提取数据的常用方法
find()
提取满足要求的首个数据
find_all()
提取满足要求的所有数据
CSS选择器
通过ID查找
bs.select(‘#abc’)
通过class查找
bs.select(‘.abc’)
通过属性查找
bs.select(a[‘class=“abc”’])
Tag对象
获取标签
bs.title
获取所有属性
bs.title.attrs
获取单个属性的值
bs.div.get(‘class’)
bs.div[‘class’]
bs.a[‘href’]
from bs4 import BeautifulSoup
html = '''
<title>malena</title>
<div class="info" float="left">good girl gone bad</div>
<div class="info" float="right" id="p">
<span>come on baby</span>
<span>you are so goo to me</span>
<a href="https://www.bilibili.com/"></a>
</div>
'''
bs = BeautifulSoup(html, 'lxml');
print((bs.title, type(bs.title)))
print(bs.find('div', class_='info'))
print('-------------')
print(bs.find_all('div', class_='info'))
for item in bs.find_all('div', class_='info'):
print('*****************')
print(item, type(item))
print('-------------')
print(bs.find_all('div',attrs={'float': 'right'}))
print('============CSS选择器==========')
print(bs.select('#p'))
print('-------------')
print(bs.select('.info'))
print('-------------')
print(bs.select('div>span'))
print('-------------')
print(bs.select('div.info>span'))
print('-------------')
for item in bs.select('div.info>span'):
print(item.text)
如果你对Python感兴趣,想要学习python,这里给大家分享一份Python全套学习资料,都是我自己学习时整理的,希望可以帮到你,一起加油!
😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓
1️⃣零基础入门
① 学习路线
对于从来没有接触过Python的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
② 路线对应学习视频
还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~
③练习题
每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
Python兼职渠道推荐
学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
2️⃣国内外Python书籍、文档
① 文档和书籍资料
3️⃣Python工具包+项目源码合集
①Python工具包
学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
②Python实战案例
光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
③Python小游戏源码
如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
4️⃣Python面试题
我们学会了Python之后,有了技能就可以出去找工作啦!下面这些面试题是都来自阿里、腾讯、字节等一线互联网大厂,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
上述所有资料 ⚡️ ,朋友们如果有需要的,可以扫描下方👇👇👇二维码免费领取🆓