from lxml import etree
text = '''
学习猿地 - 成就自己的只需一套精品
'''
#第一种方式,读取⼀个html⽂件并解析
# 使用etree解析html字符串
html = etree.HTML(text)
# 提取数据
r = html.xpath('/html/body/ul/li/a/text()')
# ['java工程师', 'python工程师', 'AI工程师']
# print(r)
r = html.xpath('/html/body/ul/li[1]/a/text()')
# print(r) #['java工程师']
#第二种方式,读取⼀个html⽂件并解析
html = etree.parse('./test.html', etree.HTMLParser())
# print(html)
# 提取数据
r = html.xpath('/html/body/ul/li/a/text()')
print(r)
2.xpath数据解析方法
from lxml import etree
# 解析html文件
html = etree.parse('./test.html', etree.HTMLParser())
# 提取数据
# r = html.xpath('/html/body/ul/li/a/text()')
# print(r)
# 获取页面中所有的li里面的数据
# r = html.xpath('//li/a/text()')
# print(r)
# 获取指定标签里面的li数据
t = html.xpath('//div[@class="teacher"]//li/a/text()')
# print(t)
h = html.xpath('//div[@class="teacher"]//li/a/@href')
# print(h)
res = list(zip(t,h))
print(res)
#
'''
/ 当前元素的直接子节点
// 当前元素的子节点或孙子节点
text() 获取文本
@attr 获取属性对应的值
'''
3.Xpath实战登录
import requests
from lxml import etree
# 封装类。进行学习猿地的登录和订单的获取
class LMonKey():
# 登录请求地址
loginurl = 'https://www.lmonkey.com/login'
# 账户中心地址
orderurl = 'https://www.lmonkey.com/my/order'
# 请求头header
headers = {
'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
# 请求对象
req = None
# token口令
token = ''
# 订单号
ordercode = 0
# 初始化方法
def __init__(self):
# 请求对象的初始化
self.req = requests.session()
if self.getlogin():
if self.postlogin():
self.getorder()
# get 登录页面 获取_token
def getlogin(self):
# 1。get请求 login页面,设置cookie,获取_token
res = self.req.get(url=self.loginurl,headers=self.headers)
if res.status_code == 200:
print('get登录页面请求成功')
html = etree.HTML(res.text)
self.token = html.xpath('//input[@name="_token"]/@value')[0]
print('token获取成功')
return True
else:
print('请求错误')
# post 请求登录 设置cookie
def postlogin(self):
uname = input('手机号:')
passw = input('密码:')
data = {
'_token':self.token,
'username':uname,
'password':passw
}
# 发起post请求
res = self.req.post(url=self.loginurl,headers=self.headers,data=data)
if res.status_code == 200 or res.status_code == 302:
print('登录成功')
# 请求订单数据
return True
# get 请求账户中心 获取默认订单号
def getorder(self):
# 3。get请求 账户中心,获取默认订单号
res = self.req.get(url=self.orderurl,headers=self.headers)
if res.status_code == 200:
print('账户中心请求成功,正在解析数据')
html = etree.HTML(res.text)
r = html.xpath('//div[@class="avatar-content"]//small/text()')
print(r)
self.ordercode = r
obj = LMonKey()
4.Xpath实战猿著
import requests,json
from lxml import etree
class Yq():
# 请求的地址 猿著
url = 'https://www.lmonkey.com/essence'
# 请求头header
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safari/537.36'
}
# 爬取的数据
data = ''
# 存储数据
filepath = './yq.json'
# 初始化
def __init__(self):
# 发送请求
res = requests.get(url = self.url,headers = self.headers)
if res.status_code == 200:
print('数据请求成功,正在写入')
# 请求的内容写入文件
with open('./yq.html','w') as fp:
fp.write(res.text)
if self.pasedata():
self.writedata()
# 解析数据
def pasedata(self):
print('解析数据')
# 解析数据
html = etree.parse('./yq.html', etree.HTMLParser())
# 提取数据 作者 文章标题 文章地址url
authors = html.xpath('//div[contains(@class,"old_content")]//div[contains(@class,"list-group-item-action")]//strong/a/text()')
titles = html.xpath('//div[contains(@class,"old_content")]//div[contains(@class,"list-group-item-action")]//div[contains(@class,"flex-fill")]//div/text()')
titleurl = html.xpath('//div[contains(@class,"old_content")]//div[contains(@class,"list-group-item-action")]//div[contains(@class,"flex-fill")]/a/@href')
# 整理数据
data = []
for i in range(0,len(authors)):
res = {
'author':authors[i],'title':titles[i],'url':titleurl[i]}
data.append(res)
self.data = data
return True
#写入数据
def writedata(self):
print('写入数据')
with open(self.filepath,'w') as fp:
json.dump(self.data,fp)
# 实例化对象
Yq()