Python--爬虫--XPath入门
目录
一、XPath简介
二、xpath函数
三、步骤
四、结果
一、XPath简介
全称:XML Path Language;
作用: 解析数据(HTML,XML),提取节点与节点包含的内容;
什么是节点?
HTML为例:<body>是一个根节点,<div>,<a>等是根节点的子节点,<div>,<a>等节点包含的节点是他们的子节点,实例如下。
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>xpath_test</title>
</head>
<body><div>这里是根节点body的子节点div<div/><p>这里是div的子节点p<p/><a>这里是根节点body的子节点a<a/><p>这里是div的子节点p<p/></body>
</html>
二、xpath函数
2.1、XPath常用函数:
xlm/html对象.etree()函数
使用方法:
2.1.1、etree = tree.xpath("/父节点1/子结点2")->返回的是子节点,返回内容如下:
(
<Element 子节点2 at 地址>)
2.1.2、
etree = tree.xpath("/父节点1/子结点2/text()")->返回的是子节点2的文本内容
2.1.3、
etree = tree.xpath("/父结点1//子结点2")->返回的是子节点2的全部后代节点
2.1.4、
etree = tree.xpath("/父结点1/子结点2/@子节点2的属性值")->返回的是子节点2的的属性值
2.1.5、
etree = tree.xpath("./节点/节点")->相对查找,一般在缩小范围准备提取内容时在循环遍历使用。
x = html.xpath()函数
*:表示任意节点
节点[第几个],1开始
./:相对查找
//:绝对查找
/@属性:拿属性的值
/text():拿标签的文本内容
父节点//子节点->显示全部 //->后代
三、步骤
3.1、运行环境:win10家庭版,phcharm edu;
3.2、下载所用的库(提供两种方法):在编辑器(如pycharm)控制台输入:pip install lxml,pip install requests,也可以在编辑器的设置里,Python Interpreter直接搜索包并下载;
3.3、操作步骤
3.3.1、目标实例
天堂电影;
3.3.2、需求
抓取2022新片推荐下载链接(可下载);
3.4、源码
# 天堂电影
# 2022新片from lxml import html
import requests# 发起请求拿源码,发现是get方式传参
url = "https://www.dy2018.com/"
resp = requests.get(url)
resp.encoding = 'gb2312'
resp_content = resp.text
# print(resp_content),测试是否成功拿到源码
# 创建html的etree解析,并把html源码交给etree解析
etree = html.etree
html = etree.HTML(resp_content)# 开始定位
lis = html.xpath('//*[@id="header"]/div/div[3]/div[4]/div[1]/div[2]/ul/li')
# 循环遍历取出
for li in lis:hrefs = li.xpath("./a/@href")# print(hrefs)all_href = ''.join(hrefs) # 把列表中的元素放在空串中,元素间用空格隔开all_hrefs = url + all_href # 把链接拼接起来if all_href == "https://www.jianpian12.com/": # 出现一个没用的干扰链接,去掉all_href = ""else:titles = li.xpath("./a/text()")all_titles = ''.join(titles) # 把列表中的元素放在空串中,元素间用空格隔开# print(all_titles, end=" ") 拿到电影名称# print(all_hrefs) 拿到电影跳转具体下载链接# 第二次请求resp2 = requests.get(all_hrefs)resp2.encoding = 'gb2312' # 查看源码,得到编码方式,进行解析resp_content2 = resp2.text# print(resp_content),测试是否成功拿到源码# 创建html的etree解析,并把html源码交给etree解析# etree = html.etreehtml2 = etree.HTML(resp_content2)# 开始定位# ”//*[@id="Zoom"]/div[1]/ul/li/a“# "//*[@id="Zoom"]/div[1]/ul/li/a" 发现每一个的id都一样直接copy,xpath路径进行使用lis2 = html2.xpath('//*[@id="Zoom"]/div[1]/ul/li')for lis in lis2:all_href2 = lis.xpath("./a/@href")all_hrefs2 = ''.join(all_href2) # 把列表中的元素放在空串中,元素间用空格隔开all_hrefs2 = all_hrefs2.split("=")[-1]# all_hrefs2 = all_hrefs2.split("/")print(all_hrefs2)# 下一步应该是拿到了下载链接的地址进行下载并保存# 但发现链接访问失败(在浏览器访问下载链接也是失败的,很奇怪),先进行到这步,之后在探究是什么问题之后继续补充
四、结果
4.1、返回的结果
五、问题与总结
5.1、问题
5.1.1、爬取到的链接访问不到内容(是否是存在防盗链呢?);
5.1.2、爬取并输出的内容分割性不好,代码需要优化;
5.2、总结
5.2.1、好好学习。
Python--爬虫--XPath入门相关推荐
- python爬虫从入门到实战笔记——第四章Scrapy框架
推荐阅读: python爬虫从入门到实战笔记--第一章爬虫原理和数据爬取 python爬虫从入门到实战笔记--第二章非结构化数据和结构化数据的提取 python爬虫从入门到实战笔记--第三章动态HTM ...
- 结构化数据丨Python爬虫基础入门系列(7)
提示:文末有福利!最新Python爬虫资料/学习指南>>戳我直达 文章目录 前言 JSON 1. json.loads() 2. json.dumps() 3. json.dump() 4 ...
- Python爬虫从入门到精通——解析库pyquery的使用
分类目录:<Python爬虫从入门到精通>总目录 解析库使用篇: 解析库re的使用:正则表达式 解析库XPath的使用 解析库Beautiful Soup的使用 解析库pyquery的使用 ...
- python爬虫从入门到精通-Python爬虫从入门到精通视频(2018新版)
原标题:Python爬虫从入门到精通视频(2018新版) Python在软件质量控制.提升开发效率.可移植性.组件集成.丰富库支持等各个方面均处于先进地位,并且随着人工智能的兴起,Python发展得越 ...
- Python爬虫新手入门教学(十):爬取彼岸4K超清壁纸
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- Python爬虫从入门到精通——爬虫实战:爬取今日头条图片新闻
分类目录:<Python爬虫从入门到精通>总目录 本文为实战篇,需提前学习Python爬虫从入门到精通中<基本库requests的使用>和<Ajax数据爬取(一):基本原 ...
- Python爬虫新手入门教学(十八):爬取yy全站小视频
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- Python爬虫新手入门教学(十七):爬取yy全站小视频
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- Python爬虫新手入门教学(十六):爬取好看视频小视频
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. Python爬虫.数据分析.网站开发等案例教程视频免费在线观看 https://space. ...
- Python爬虫——XPath的使用
Python爬虫--XPath的使用 使用实例一:获取需要的文字 1.导入需要使用的模块 import urllib.request from lxml import etree 2.发送请求访问网站 ...
最新文章
- spyder 崩溃解决方案
- KubeVela 1.0 :开启可编程式应用平台的未来
- jeecgboot 弹出modal刷新主窗体_保利天汇|自然的温度,刷新园林美学天际/辽宁房产特刊...
- 计算机专业导论论文2000字,计算机专业导论论文.doc
- 在vue项目中引用element-ui时 让el-input 获取焦点的方法
- oracle控制文件全备失败,Oracle数据库案例整理-恢复数据库失败-主备机控制文件所在目录不同...
- leetcode109. 有序链表转换二叉搜索树
- 【Flink】Flink 的 slotSharingGroup 有什么用
- php标签扩展,标签扩展 · ThinkPHP5.0完全开发手册 · 看云
- mysql过程分析_mysql事务执行过程分析
- python与mongodb更新_Python对MongoDB增删改查
- 学前儿童健康教育 复习资料 渝粤题库整理
- ceph的rbd使用和理解(全)
- flutter插件开发学习之旅(4)-------检测GPS状态,打开GPS和显示经纬度实战
- C语言与Java的异同
- 一张图掌握薛兆丰经济学讲义的精华
- 利用抖音Cookie充值接口提取支付链接,调起原生微信h5支付宝h5支付
- ISP—图像调试实习生(第七天)
- Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255]
- CLIP: Learning Transferable Visual Models From Natural Language Supervision
热门文章
- 2020 Windows10 IIS配置PHP运行环境
- 有一种爱情叫做“比悲伤更悲伤的故事”
- html转换成xsl,xml+xsl转换为html
- PoolingHttpClientConnectionManager实现http连接池
- 分布式系统-同步化-时钟同步-物理时钟与Lamport时间戳(逻辑时钟)
- 男人刮胡子学问 不能随便刮
- 数字信号处理相关1(卷积(convolution)的几种解释)
- 最动听的声音 2019年农历腊月二十六
- 铁匠发布:可执行文件,资产,工具和着色器
- 深入理解Android之设备加密Device Encryption