Xpath最初用来处理XML解析,同样适用于HTML文档处理。相比正则表达式更方便一些

Xpath基本规则

nodename   表示选取nodename 节点的所有子节点
/          表示当前节点的直接子节点
//         表示当前节点的子节点和孙子节点
.          表示当前节点
..         当前节点的父节点
@          选取属性

下面举例使用下

text = '''
<div class="bus_vtem"><a href="https://www.aisinei.org/thread-17826-1-1.html" title="XINGYAN星颜社 2018.11.09 VOL.096 唐思琪 [47+1P]" class="preview"  target="_blank"><img src="https://i.asnpic.win/block/74/74eab64cfa4229d58c19a64970368178.jpg" width="250" height="375" alt="XINGYAN星颜社 2018.11.09 VOL.096 唐思琪 [47+1P]"/><span class="bus_listag">XINGYAN星颜社</span></a><a href="https://www.aisinei.org/thread-17826-1-1.html" title="XINGYAN星颜社 2018.11.09 VOL.096 唐思琪 [47+1P]"  target="_blank"><div class="lv-face"><img src="https://www.aisinei.org/uc_server/avatar.php?uid=2&size=small" alt="发布组小乐"/></div><div class="t">XINGYAN星颜社 2018.11.09 VOL.096 唐思琪 </div><div class="i"><span><i class="bus_showicon bus_showicon_v"></i>5401</span><span><i class="bus_showicon bus_showicon_r"></i>1</span></div></a></div>
'''
from lxml import etree
html = etree.HTML(text)
result = etree.tostring(html)
#打印lxml生成的字符串,如果html格式不全,会自动补全
print(result.decode('utf-8'))
# 打印根节点下所有子孙节点
result2 = html.xpath('//*')
print(result2)
result3 = html.xpath('//a[@class="preview"]')
print(result3)

result.decode(‘utf-8’) 可以补全缺失的html格式字符串
html.xpath(‘//*’)查找根节点下所有子孙节点
html.xpath(‘//a[@class=”preview”]’) 在根节点所有子孙节点中找到属性class为preview的a节点。

lxml同样可以读取文件

from lxml import etree
html = etree.parse('./test.html',etree.HTMLParser())

lxml 操作子节点

from lxml import etree
html = etree.HTML(text)
result = html.xpath('//bus/a')

操作父节点

from lxml import etree
html = etree.HTML(text)
result = html.xpath('//a[@class="preview"]/../@class')
print(result)

先找到class属性为preview的a节点,然后找到其父节点,接着筛选父节点的class属性,打印结果为[‘bus_vtem’]

属性匹配

上面已经写过了格式为: 节点名[@属性名=”属性值”]

属性获取

上面已经谢过了,格式为: 节点名/@属性名,注意这里没有[]

多属性值匹配

上面的节点bus 属性class 只有一个值bus_vtem,如果新增一个值mtest,那么属性匹配要更换为contains,不然会报错

from lxml import etree
text2 = '''<div class="bus_vtem  mtest"> hurricane!</div>'''
html2 = etree.HTML(text2)
result5 = html2.xpath('//*[contains(@class, "mtest")]')
# 错误用法
#result5 = html.xpath('//*[@class="mtest"]')
print(result5)

多属性匹配

多属性匹配用于筛选一个节点时非常方便,各个属性的判断可以用 and or != == 等操作

from lxml import etree
text3 = '''<div class="bus_vtem mtest" name="hurricane"> hurricane!</div><div class="bus_vtem mtest" name = "tornado"> tornado!</div>'''
html3 = etree.HTML(text3)
result6 = html3.xpath('//*[contains(@class, "mtest") and @name="hurricane"]/text()')
print(result6)

文本获取

在节点后加/text()即可,如
result6 = html3.xpath(‘//*[contains(@class, “mtest”) and @name=”hurricane”]/text()’)

下面结合前边讲述的request,cookie,以及今天的lxml知识,实战爬取艾丝新发布的美女图片地址,代码如下

import requests
import re
import time
from lxml import etreeUSER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0'
COOKIES = r'__cfduid=d78f862232687ba4aae00f617c0fd1ca81537854419; bg5D_2132_saltkey=jh7xllgK; bg5D_2132_lastvisit=1540536781; bg5D_2132_auth=479fTpQgthFjwwD6V1Xq8ky8wI2dzxJkPeJHEZyv3eqJqdTQOQWE74ttW1HchIUZpgsyN5Y9r1jtby9AwfRN1R89; bg5D_2132_lastcheckfeed=7469%7C1541145866; bg5D_2132_st_p=7469%7C1541642338%7Cda8e3f530a609251e7b04bfc94edecec; bg5D_2132_visitedfid=52; bg5D_2132_viewid=tid_14993; bg5D_2132_ulastactivity=caf0lAnOBNI8j%2FNwQJnPGXdw6EH%2Fj6DrvJqB%2Fvv6bVWR7kjOuehk; bg5D_2132_smile=1D1; bg5D_2132_seccode=22485.58c095bd095d57b101; bg5D_2132_lip=36.102.208.214%2C1541659184; bg5D_2132_sid=mElHBZ; Hm_lvt_b8d70b1e8d60fba1e9c8bd5d6b035f4c=1540540375,1540955353,1541145834,1541562930; Hm_lpvt_b8d70b1e8d60fba1e9c8bd5d6b035f4c=1541659189; bg5D_2132_sendmail=1; bg5D_2132_checkpm=1; bg5D_2132_lastact=1541659204%09misc.php%09patch'
class AsScrapy(object):def __init__(self,pages=1):try:self.m_session = requests.Session()self.m_headers = {'User-Agent':USER_AGENT,#'referer':'https://www.aisinei.org/',
                        }self.m_cookiejar = requests.cookies.RequestsCookieJar()for cookie in COOKIES.split(';'):key,value = cookie.split('=',1)self.m_cookiejar.set(key,value)except:print('init error!!!')def getOverView(self):try:req = self.m_session.get('https://www.aisinei.org/portal.php',headers=self.m_headers, cookies=self.m_cookiejar, timeout=5)html = etree.HTML(req.content.decode('utf-8'))#result=html.xpath('//div[@class="bus_vtem"]/a[@title!="紧急通知!紧急通知!紧急通知!"]/attribute::*')#print(result)htmllist = html.xpath('//div[@class="bus_vtem"]/a[@title!="紧急通知!紧急通知!紧急通知!" and @class="preview"]/@href')titlelist = html.xpath('//div[@class="bus_vtem"]/a[@title!="紧急通知!紧急通知!紧急通知!" and @class="preview"]/@title')print(htmllist)print(titlelist)print(len(htmllist))print(len(titlelist))            time.sleep(1)passexcept:print('get over view error')if __name__ == "__main__":asscrapy = AsScrapy()asscrapy.getOverView()

通过lxml分析,可以摘取资源地址

接下来爬取图片,读者可以发送request请求即可,留作课后题吧。
源码下载地址
https://github.com/secondtonone1/python-
谢谢关注我的公众号

转载于:https://www.cnblogs.com/secondtonone1/p/9979596.html

python学习(24) 使用Xpath解析并抓取美女图片相关推荐

  1. python爬虫学习基础教程,批量抓取美女图片!

    python的抓取功能其实是非常强大的,当然不能浪费,呵呵.下面就与大家分享一个python写的美女图自动抓取程序吧! 其中用到urllib2模块和正则表达式模块.下面直接上代码: 用python批量 ...

  2. python抓取美女图片实例

    原文链接:python抓取美女图片实例 python脚本编程,和php类似,主要是作web项目及脚本抓取图片和文章.日志分析等,python比较有名的web开发框架有Django.Tornado.we ...

  3. Python学习笔记——爬虫之urllib数据抓取

    目录 urllib库的基本使用 Get方式 POST方式: 获取AJAX加载的内容 Handler处理器 和 自定义Opener urllib库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资 ...

  4. python搞笑动态图_python小爬虫抓取搞笑图片

    大部分小程序都是基于py2.7的,我于是便想直接出一个py3.4最新版本的教程.大致看一下第一篇了解一下的一些概念性的东西以及bs4第三方库的使用.请参考文末. 我们的第一个小程序的相关要求: 目标: ...

  5. python学习笔记之模块爬虫实战-爬取网站图片(十四)

    背景说明 爬取煎蛋网中随手拍栏目中的某页的所有图片 实战 分析 先打开煎蛋网站中的"随手拍",链接为:http://jandan.net/ooxx/MjAyMDA1MTctMTc1 ...

  6. appium python 抓包_Python学习教程:另辟蹊径,appium抓取app应用数据了解一下

    原标题:Python学习教程:另辟蹊径,appium抓取app应用数据了解一下 作为爬虫工程师,没有价格不知道selenium的. 什么是selenium? Selenium原本是一个用于Web应用程 ...

  7. python爬虫电影资源_【Python爬虫】第十六次 xpath整站抓取阳光电影网电影资源

    [Python爬虫]第十六次 xpath整站抓取阳光电影网电影资源# 一.解析电影url # 请求15题构造出的每个电影菜单的分页url,解析出每个电影url # 二.xpath解析电影资源 # 对第 ...

  8. python爬取app播放的视频,Python爬虫工程师必学——App数据抓取实战视频教程

    爬虫分为几大方向,WEB网页数据抓取.APP数据抓取.软件系统数据抓取.本课程主要为同学讲解如何用python实现App数据抓取,课程从开发环境搭建,App爬虫必备利器详解,项目实战,到最后的多App ...

  9. python实现食品推荐_通过Python语言实现美团美食商家数据抓取

    首先,我们先来打开美团美食商家页面,来分析一下. 如上面所提供的URL即为美团美食商家页面.或者我们通过美团官网打开一个美团美食商家页面,打开步骤如下:1.打开浏览器,输入 即可打开美团北京首页 2. ...

最新文章

  1. c语言如何输出整串链表,大神帮我看一下怎么输入输出一个链表,我输入了但是没输出啊...
  2. 在CentOS 7服务器中使用Jexus发布.net core webapi
  3. 3 左右_3万左右电动迷你小汽车,3万左右电动迷你小汽车车型推荐
  4. lc滤波电路电感电容值选择_这几种常见的无源滤波电路,你都了解吗 ?
  5. 软件工程—团队作业1
  6. js 正则表达式,正整数
  7. 利用moviepy库制作好用的MP4、mov、mav、avi等视频类型转换gif图片的工具
  8. ceph关闭同步之后的故障记录
  9. python机器学习库sklearn——逻辑回归
  10. 在线工具大全 - 推荐
  11. 物联网和互联网有什么关系
  12. 使用.NET Core和Vue搭建WebSocket聊天室
  13. 什么是CSR证书申请文件?
  14. win7服务器未能登录怎么解决,win7系统出现User Profile Service服务未能登录的解决方法...
  15. 前端点击图片将跳出显示框显示图片
  16. S2JH 自动审计@Audited 的问题
  17. Redis数据结构Set应用场景--黑名单校验器、京东与支付宝抽奖、微博榜单与QQ群的随机展示、帖子点赞、关注与粉丝、微关系计算、HyperLogLog的入门使用
  18. Android的StrictMode
  19. 软通动力、海辉、文思以及金融外包
  20. 2016计算机考研大纲视频,2016计算机考研大纲介绍:

热门文章

  1. Endnot引文格式设置随笔
  2. [转] 关于“时间”的一次探索
  3. 《machine learning in action》机器学习 算法学习笔记 决策树模型
  4. PDF中的空白页怎么删除
  5. x1 php168,新手快速入门教程
  6. 自定义字体之BMFont的使用
  7. 二零零九年经典雷人语录总汇四百零五条[转的]
  8. 01、本地微信服务器测试环境
  9. maven打包jar包到本地仓库
  10. 被各种手机浏览器的推荐烦死,推荐一种干净、有效的浏览器操作