数据解析之xpath
一、环境安装
下载lxml
pip install lxml
二、使用
XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。
常用xpath表达式:
属性定位:
#找到class属性值为song的div标签
//div[@class="song"]
层级&索引定位:
#找到class属性值为tang的div的直系子标签ul下的第二个子标签li下的直系子标签a
//div[@class="tang"]/ul/li[2]/a
逻辑运算:
#找到href属性值为空且class属性值为du的a标签
//a[@href="" and @class="du"]
模糊匹配:
//div[contains(@class, "ng")]
//div[starts-with(@class, "ta")]
取文本:
# /表示获取某个标签下的文本内容
# //表示获取某个标签下的文本内容和所有子标签下的文本内容
//div[@class="song"]/p[1]/text()
//div[@class="tang"]//text()
取属性:
//div[@class="tang"]//li[2]/a/@href
xpath解析原理(编码流程):
- - 实例化一个etree的对象,且将页面源码数据加载到该对象中
- - 调用etree对象中的xpath方法实现标签定位和数据的提取
- - 在xpath函数中必须作用xpath表达式
可以给浏览器安一个xpath插件--xpath.crx
- 安装方式,打开浏览器开发者模式,直接将xpath.crx 拖进去
- xpath插件的开启和关闭的快捷键:
- ctrl+shift+x
- 可进行xpath表达式的校验
xpath解析案例
- 一、爬取煎蛋网图片数据http://jandan.net/ooxx
- 图片src是加密的,加密方式封装在标签调用的函数中
- 先爬取密文,然后根据加密方式解密。
# 需求,爬取煎蛋网图片数据, 图片的src加密了
import requests
from lxml import etree
import base64 # 对src加密的方法
from urllib import request
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12 Safari/537.36'
}
url = "http://jandan.net/ooxx/page-64#comments"
page_text = requests.get(url,headers=headers).text # 解析图片src密文
tree = etree.HTML(page_text)
code_list = tree.xpath('//span[@class="img-hash"]/text()') # 获取密文
# 解析密文
for code in code_list:
img_url = "http:" + base64.b64decode(code).decode()
imgName = img_url.split('/')[-1]
request.urlretrieve(img_url, imgName)
print(imgName,"下载成功")
二、站长素材简历模板爬取
- 报这个错::连接池的错误,高频访问占用连接对象。
- HTTPConnectionPool(host:XX)Max retries exceeded with url:
- 解决办法:
- 1. 请求头中设置 'Connection':'close'
- 如何让请求结束后马上断开连接且释放池中的连接资源: 'Connection':'close' # 请求成功之后马上断开连接
- 2. 或使用代理ip
- 1. 请求头中设置 'Connection':'close'
import requests
from lxml import etree
import random
import os
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12 Safari/537.36',
'Connection':'close' # 请求成功之后马上断开连接
}
url_one = "http://sc.chinaz.com/jianli/free.html" # 定制一个通用url摸版
url_demo = "http://sc.chinaz.com/jianli/free_%d.html"
start_page = int(input("开始页"))
end_page = int(input("结束页")) for pageNum in range(start_page,end_page+1):
if pageNum == 1:
url = url_one
else:
url = format(url_demo%pageNum) response = requests.get(url=url,headers=headers)
response.encoding = 'utf-8' # 编码
page_text = response.text # 解析简历详情页的url
html = etree.HTML(page_text)
div_list = html.xpath('//div[@id="container"]/div')
for div in div_list:
name = div.xpath('./p/a/text()')[0]
url_detail = div.xpath('./p/a/@href')[0]
#对详情页的url发起请求,获取详情页的源码数据
detail_page_text = requests.get(url_detail,headers=headers).text
tree = etree.HTML(detail_page_text)
li_list = tree.xpath('//div[@class="clearfix mt20 downlist"]/ul/li')
#随机选取一个li标签(li标签中包含了下载地址的url)
download_url = random.choice(li_list).xpath('./a/@href')[0]
#进行简历数据的下载
data = requests.get(url=download_url,headers=headers).content
name = name+'.rar' # 压缩包
if not os.path.exists("./简历模板"):
os.mkdir("./简历模板")
with open(f"./简历模板/{name}", 'wb') as fp:
fp.write(data)
print(name,"下载成功")
数据解析之xpath的更多相关文章
- Python网络爬虫之三种数据解析方式 (xpath, 正则, bs4)
引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...
- python爬虫数据解析之xpath
xpath是一门在xml文档中查找信息的语言.xpath可以用来在xml文档中对元素和属性进行遍历. 在xpath中,有7中类型的节点,元素,属性,文本,命名空间,处理指令,注释及根节点. 节点 首先 ...
- Python爬虫:数据解析 之 xpath
资料: W3C标准:https://www.w3.org/TR/xpath/all/ W3School:https://www.w3school.com.cn/xpath/index.asp 菜鸟教程 ...
- python爬虫的页面数据解析和提取/xpath/bs4/jsonpath/正则(1)
一.数据类型及解析方式 一般来讲对我们而言,需要抓取的是某个网站或者某个应用的内容,提取有用的价值.内容一般分为两部分,非结构化的数据 和 结构化的数据. 非结构化数据:先有数据,再有结构, 结构化数 ...
- python爬虫数据解析的四种不同选择器Xpath,Beautiful Soup,pyquery,re
这里主要是做一个关于数据爬取以后的数据解析功能的整合,方便查阅,以防混淆 主要讲到的技术有Xpath,BeautifulSoup,PyQuery,re(正则) 首先举出两个作示例的代码,方便后面举例 ...
- 爬虫-数据解析-xpath
xpath 解析 模块安装 : pip install lxml xpath的解析原理 实例化一个etree类型的对象,且将页面源码数据加载到该对象中 需要调用该对象的xpath方法结合着不同形式的x ...
- 数据解析(XML和JSON数据结构)
一 解析 二 XML数据结构 三 JSON 数据结构 一 解析 1 定义: 从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照 ...
- 【原】iOS学习38网络之数据解析
1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...
- iOS - XML 数据解析
前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...
随机推荐
- angularJS笔记之过滤器
angular的过滤器用法: 1.模板中使用 {{expression|filter}} 也可以多个filter连用 {{expression|filter1|filter2|...}} filter ...
- 【转】3D图形引擎(DX9): FX
做图形程序已经很多年了,积累了一些经验.来这个论坛也有好几年了,遇到问题的时候,也会在这里发帖子问,也很感谢大家的回答与帮助,希望能多认识一些朋友,大家多交流.分享.做这款项目也有蛮多年了,终于上线了 ...
- express源码学习
终于腾出手来学习express.express在node.js中一株独秀.好像任何一种有主导的托管平台的语言,都出现这现象--马太效应.express是社区的共同孩子,里面聚集上社区最好的常用模块.从 ...
- leetcode:Median of Two Sorted Arrays分析和实现
这个问题的大意是提供两个有序的整数数组A与B,A与B并集的中间数.[1,3]与[2]的中间数为2,因为2能将A与B交集均分.而[1,3]与[2,4]的中间数为2.5,取2与3的平均值.故偶数数目的中间 ...
- 【bzoj2947】[Poi2000]促销
2947: [Poi2000]促销 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 181 Solved: 120[Submit][Status][D ...
- 面试题: java多线程 背1
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...
- linux删除文件后磁盘空间未释放的问题
很可能是该文件还被其它进程使用. 使用: lsof | grep deleted | grep $FILE_NAME 可以看到正使用该文件的进程,将之kill即可.也可以查看进程来验证: ls -l ...
- 235D Graph Game
传送门 题目大意 https://www.luogu.org/problemnew/show/CF235D 分析 我们先考虑它是树的情况 我们设$event(x,y)$表示删除点x是y与x联通这件事对 ...
- python3--列表生成式
# Auther: Aaron Fan # 原始的写法:a = []for i in range(10): a.append(i*2)print(a) # 用列表生成式完成上面的写法:a = [i*2 ...
- Django开发——集成的子框架django.contrib
Django开发——集成的子框架django.contrib 2018年09月11日 19:32:42 Mrkang1314 阅读数:63 https://blog.csdn.net/mashaok ...