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 ...
随机推荐
- MS17-010漏洞检测
1.扫描脚本的下载和加载 由于Metasploit还没有更新MS17-010检测的模块,所以要去exploit-db下载,并在MSF中加载. cd /usr/share/metasploit-fram ...
- maven命令的简单理解
mvn clean //在target文件夹中的一切都将被删除 mvn compile //编译源代码 mvn test //运行应用程序中的单元测试 mvn package //把jar打到本项 ...
- nagios维护之常见问题
一.重启nagios 报错: Starting nagios:This account is currently not available. #这个账户目前不可用: 解决方法: a.编辑/e ...
- @RequestParam使用须知
--------------------------siwuxie095 @RequestParam 使用须知 使用 @Requ ...
- 大数据分析界的“神兽”Apache Kylin有多牛?【转】
本文作者:李栋,来自Kyligence公司,也是Apache Kylin Committer & PMC member,在加入Kyligence之前曾就职于eBay.微软. 1.Apache ...
- java 基础之--nio 网络编程
在传统的Java 网络编程中,对于客户端的每次连接,对于服务器来说,都要创建一个新的线程与客户端进行通讯,这种频繁的线程的创建,对于服务器来说,是一种巨大的损耗,在Java 1.4 引入Java ni ...
- IEDriver executable needs to be available in the path
解决办法: 去http://selenium-release.storage.googleapis.com/index.html 下载指定IE版本 解压后 拷贝到Python的目录下 重新运行,提示错 ...
- php ActiveMQ的安装与使用
一.ActiveMQ是什么?ActiveMQ是Apache出品,最流行的,能力强劲的开源消息总线.支持多种语言客户端(Java,C,C++,C#,Python,Ruby,Perl,PHP), 支持多种 ...
- 使用PHP来简单的创建一个RPC服务
RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ...
- django分页的东西, 不详细, 但是也足够了。
视图函数中的代码 from django.shortcuts import render, HttpResponse, redirect import json from django.core.pa ...