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 ...
随机推荐
- Beef的使用
应用普遍转移到B/S架构,浏览器成为统一客户端程序 通过注入JS脚本,利用浏览器攻击其他网站 ruby编写 攻击手段 利用网站XSS漏洞实现攻击 诱使客户端访问含有hook的伪造站点 结合中间人攻击注 ...
- db2 性能查看top sql
DB2 V10.3 查看top sql ,类似oracle 这篇文章是对之前有篇db2 v9的简化更新,总体还是觉得DB2TOP比较好用直观,不过需要导出SQL时,或自动化脚本时,还是建议执行S ...
- 【Django】关于ORM的使用
添加模型并映射到数据库中: 1. 在 settings.py 中,配置好 DATABASES ,做好数据库相关的配置. 以mysql为例: DATABASES = { 'default': { 'EN ...
- java中继承thread类的其他类的start()方法与run()方法
java中继承thread或者实现runnable接口的类必须重写run()方法. 如果其执行了start()方法,其实就是启动了线程的run()方法. 注意:如果是实现runnable接口的类是没有 ...
- mysql分组GROUP BY常用sql
数据分组 GROUP BY GROUP BY可以根据一个或多个字段进行分组. 比如,根据prod_id分组: SELECT prod_id ,user_id FROM products GROUP B ...
- 第九章 词典 (b)散列:原理
- Netty编解码技术
编解码技术,说白了就是java序列化技术,序列化目的就两个,第一进行网络传输,第二对象持久化. 虽然我们可以使用java进行对象序列化,netty去传输,但是java序列化的硬伤比较多,比如java序 ...
- win静态库动态库
静态链接库: #include "..\lib.h" #pragma comment(lib,"..\\debug\\libTest.lib") //指定与静态 ...
- Python: Tkinter、ttk编程之计算器
起源: 研究Python UI编程,我偏喜欢其原生组件,于是学习Tkinter.ttk组件用法.找一计算器开源代码,略加修整,以为备忘.其界面如图所示: 1.源代码(Python 2.7): # en ...
- java_12多态
1多态概述 多态是继封装.继承之后,面向对象的第三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态. Java作为面向对象的语言,同样 ...