xpath笔记
1.使用lxml.etree.parse()解析html文件,该方法默认使用的是“XML”解析器,所以如果碰到不规范的html文件时就会解析错误,报错代码如下:
lxml.etree.XMLSyntaxError: Opening and ending tag mismatch: meta line 3 and head, line 3, column 87
解决办法:
自己创建html解析器,增加parser参数
from lxml import etree
parser = etree.HTMLParser(encoding="utf-8") #自定义解析器
htmlelement = etree.parse("baidu.html", parser=parser)
print(etree.tostring(htmlelement, encoding="utf-8").decode("utf-8"))
总结:
1.xpath方法只能对html文档使用,将字符串转为html对象的方法是etree.HTML(text),加载html文档的方法是etree.prase(.html)
2.先使用//*[@id=""]定位到大概位置,再使用/和//精确到要提取的位置,最后使用text()提取文本或@提取属性
3.提取到信息后的对象是列表,先转换为字符串类型,然后再用re.sub()方法清楚多余字符
4.灵活使用eval函数来使字符串变为列表
#!/usr/bin/env.python
#._*_ coding:utf-8 _*_
from lxml import etree
import requests
import re def spider(url):
# url = 'https://movie.douban.com/subject/26394152/'
# html = etree.HTML(text) 将文本转换为html格式,自动补全标签
res =requests.request('GET', url)
return res.text def write_file(text):
with open("Bumblebee.html", "wb") as f:
f.write(text.encode('utf-8')) def xpath_use():
html = etree.parse("./Bumblebee.html", etree.HTMLParser(encoding="utf-8")) #使用etree打开html文档,如果加载失败,则添加后面句话
# //*[@id="results"]/tbody[2]/tr[1]
# select = " //*[@id='celebrities']/ul//li/div/span[1]/a/text() |" \
# " //*[@id='celebrities']/ul//li/div/span[2]/text() " # 选择演员和对应角色
# select = "//*[@id='recommendations']/div//dl/dd/a/text()" # 和此电影相似
select = "//*[@class='comment-item']/div/h3/span[2]/child::*/text()" # child::*选择当前节点的所有子元素 data = html.xpath(select)
data = str(data) # 转换为字符串方便清洗
# data = data.split(",") # 以逗号分词
data = re.sub(r"\s*","",data) # 替换多余空字符
data = re.sub(r"\\n","",data)
data = eval(data) # eval相当于把括号打开,不加eval的时候[]仅是字符,不是列表
print(data)
for i in data:
print(i) if __name__ == '__main__':
xpath_use()
xpath笔记的更多相关文章
- xpath 笔记
from lxml import etree info = f.read() # requests.get().text # print(info) selector=etree.HTML(info ...
- python中使用XPath笔记
XPath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式 re两者可以完成同样的工作,实现的功能也差不多,但XPath明显比re具有优势,在网页分析上使re退居二线. XPath介绍: ...
- XML学习笔记6——XPath语言
在上一篇笔记的结尾,我们接触到了两个用于选择XML文档中特定范围的元素<selector>和<field>,这两个元素的取值都是XPath表达式,那么,什么是XPath呢?简单 ...
- Xpath学习笔记
最近复习自己上一年的课本,想起来刚学那个时候想做一个写日记的软件. 想不如做,用控制台瞎写了一个,一做就成了,没什么bug,期间使用Xpath来读数据,所以就稍微学了一下. 学习过程就这样做一点笔记, ...
- JAVA与DOM解析器提高(DOM/SAX/JDOM/DOM4j/XPath) 学习笔记二
要求 必备知识 JAVA基础知识.XML基础知识. 开发环境 MyEclipse10 资料下载 源码下载 sax.dom是两种对xml文档进行解析的方法(没有具体实现,只是接口),所以只有它们是无 ...
- Scrapy:学习笔记(1)——XPath
Scrapy:学习笔记(1)——XPath 1.快速开始 XPath是一种可以快速在HTML文档中选择并抽取元素.属性和文本的方法. 在Chrome,打开开发者工具,可以使用$x工具函数来使用XPat ...
- XPath路径表达式笔记(转载)
简单说,xpath就是选择XML文件中节点的方法. 所谓节点(node),就是XML文件的最小构成单位,一共分成7种. - element(元素节点)- attribute(属性节点)- text ( ...
- 笔记-爬虫-XPATH
笔记-爬虫-XPATH 1. xpath XPath是W3C的一个标准.它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计.目前有XPath1.0和XPath2.0两 ...
- Python爬虫:Xpath语法笔记
一.选取节点 常用的路劲表达式: 表达式 描述 实例 nodename 选取nodename节点的所有子节点 xpath(‘//div’) 选取了div节点的所有子节点 / 从根节点选取 xpat ...
随机推荐
- java搭建web从0-1(第一步:创建web工程)
intellij idea版本:2017 1.新建一个web工程 使用工具intellij ideal,注意:只有Ultimate版本的可以新建web工程,社区版本的不支持新建web工程 File ...
- SQL Server 2008 R2官方中文版下载
SQL Server 2008是一个重大的产品版本,它推出了许多新的特性和关键的改进,使得它成为至今为止的最强大和最全面的SQL Server版本. 在现今数据的世界里,公司要获得成功和不断发展,他们 ...
- web前端开发浏览器兼容性处理大全
1.居中问题 div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto; 2.高度问题 两上下排列或嵌套的div,上面的div设置高度(height),如果di ...
- python读写文件中read()、readline()和readlines()的用法
python中有三种读取文件的函数: read() readline() readlines() 然而它们的区别是什么呢,在平时用到时总会遇到,今天总结一下. 0. 前期工作 首先新建一个文件read ...
- TDD - 登录成功和失败
/** * Created by Administrator on 2017-04-06. */ @RunWith(SpringJUnit4ClassRunner.class)@SpringBootT ...
- Chrome控制台格式化输出
一 格式化输出文字 console.log('%c你好','color:green;'); console.log('%c你好%c啊','color:green;','color:blue;'); 二 ...
- 专项测试——移动app安装包检测
一.背景和现状 安装包的重要性无需多提,针对安装包质量控制越来越严格和规范,包括证书.文件大小.安装成功率等,APP的证书及混淆是影响APP的安装成功率及代码安全性的很大因素,随着功能迭代,安装包也会 ...
- RTP格式解析
一般为12字节,16字节头(转自https://www.cnblogs.com/qingquan/archive/2011/07/28/2120440.html) 概述: 实时传送协议(Real-ti ...
- gradle项目与maven项目互转
maven to gradle 在maven项目根目录下执行命令: gradle init --type pom 当然你得先下载Gradle,配置完环境变量. gradle to maven grad ...
- python脚本删除文件与目录的命令
1. 删除文件的命令 import os os.remove(file) os.unlink(file) 2.删除目录的命令 import shutil shutil.rmtree(directory ...