您的位置:首页 > 编程语言 > Python开发

Python:XPath提取猫眼电影(转载)

2020-07-09 10:10 399 查看

XPath数据提取
XML介绍

XML称为可扩展标记语言,XML是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。非常类似HTML。

HTML 和 XML的区别在于HTML主要用来显示数据,XML是用来传输数据。

XML都是标签闭合的。例如: … 成对出现。

<?xml version="1.0" encoding="utf-8"?> 冰与火之歌 乔治 马丁 2005 365.00 哈利波特与死亡圣器 J K. 罗琳 2005 48.98 Python编程-从入门到放弃 挖掘机小王子 2048 99.00 Python编程-从看懂到看开 尼古拉斯-赵四 2003 39.95

在上面的xml语法中存在父子,先辈等关系。

XPath介绍

XPath (XML Path Language) 是一门在 XML 文档中查找信息的语言,可用来在 XML/HTML 文档中对元素和属性进行遍历,并提取相应元素。

也是一种数据提取方式,只不过针对的是HTML/XML数据,因为爬虫主要和HTML页面打交道。

XPath匹配规则

下表是XPath常用的规则:

lxml库

lxml 是一个Python第三方模块。主要的功能是如何解析和提取 HTML/XML 数据。

lxml和正则类似,是一款高性能的 Python HTML/XML 解析器,我们可以利用之前学习的XPath语法,来快速的定位特定元素以及节点信息。

安装:pip install lxml
在线安装不成功就采用离线安装。

再安装 parsel 时会自动安装 lxml,这里就不需要再次安装了。

使用lxml模块

初始化生成一个XPath解析对象,同时可以自动补全残缺的HTML标签。传入网页源码。

from lxml import etree

string = “”"

Python编程-从看懂到看开
Python编程
2003
39.95

“”"

再解析之前必须先转化一下

html = etree.HTML(string)

返回结果是列表

result = html.xpath("//book[contains(@cover,‘paper’)]/title/text()")
result = html.xpath("//book[4]/title/text()")

print(result)

因为 parsel 对 lxml 进行了, 所以可以直接再 parsel 中无缝切换使用 xpath 。

使用XPath选取指定内容。括号里面书写XPath语法规则。返回列表。

-- coding: utf-8 --

import requests
import parsel

headers = {
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36’
}

response = requests.get(‘https://maoyan.com/board/4?offset=0’, headers=headers)
html = response.text

%% 选择任意节点

sel = parsel.Selector(html)

提取 p 标签

ps = sel.xpath(’//p’)
for p in ps:
print(p.get())

案例:XPath提取猫眼电影
‘’’
猫眼电影:
https://maoyan.com/board/4?offset=20
函数式:
1. 获取(请求)一页的函数
2. 定义解析函数(解析一页)
3. 写入文件函数
4. 循环函数
5. python学习交流群:695185429
‘’’
import json
import requests
from lxml import etree

获取响应

def getOnePage(url):
‘’‘获取一页的响应的函数’’’

response = requests.get(url)

return response.text

解析响应 --> 结果

def parseOnePage(text):

# 初始化解析
html = etree.HTML(text)
# 里面有所有的数据 先选择上一层  这一层里面包含所有数据 然后循环遍历
data = html.xpath('//dl[@class="board-wrapper"]')
# 遍历提取所有的元素
for dat in data:
print(dat)
# 继续选取
# 标题
title = dat.xpath('.//div//a/text()')
# 主演
star = dat.xpath('.//p[@class="star"]/text()')
# 时间
releasetime = dat.xpath('//p[@class="releasetime"]/text()')

for tit, sta, rel in zip(title, star, releasetime):
# 在函数里面遇到return就终止
# 生成器
yield {
'电影名字': tit,
'主演': sta.strip(),
'上映时间': rel
}

def save2File(data):
# with open(‘maoyan66.txt’, ‘a’, encoding=‘utf-8’) as fp:
# fp.write(data+’\n’)

with open('maoyan66.txt', 'a', encoding='utf-8') as fp:
fp.write(json.dumps(data, ensure_ascii=False)+'\n')

if name == “main”:

for page in range(10):

# 一页网址
url = f'https://maoyan.com/board/4?offset={page*10}'
# 调用
r = getOnePage(url)
# 解析数据 返回生成器
result = parseOnePage(r)
for res in result:
# with open('maoyan.txt','a',encoding='utf-8') as fp:
#     # 打印到文件
#     print(str(res), file=fp)
save2File(str(res))

原文链接:https://blog.csdn.net/fei347795790/article/details/106120670

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: