在lxml中使用XPath语法:

获取所有li标签:

from lxml import etree

html = etree.parse('hello.html')
print type(html) # 显示etree.parse() 返回类型

result = html.xpath('//li')

print(result) # 打印<li>标签的元素集合

获取所有li元素下的所有class属性的值:

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li/@class')

print(result)

获取li标签下href为www.baidu.com的a标签:

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li/a[@href="www.baidu.com"]')

print(result)

获取li标签下所有span标签:

from lxml import etree

html = etree.parse('hello.html')

#result = html.xpath('//li/span')
#注意这么写是不对的:
#因为 / 是用来获取子元素的,而 <span> 并不是 <li> 的子元素,所以,要用双斜杠

result = html.xpath('//li//span')

print(result)

获取li标签下的a标签里的所有class:

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li/a//@class')

print(result)

获取最后一个li的a的href属性对应的值:

from lxml import etree

html = etree.parse('hello.html')

result = html.xpath('//li[last()]/a/@href')
# 谓语 [last()] 可以找到最后一个元素

print(result)

获取倒数第二个li元素的内容:

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li[last()-1]/a')

# text 方法可以获取元素内容
print(result[0].text)

获取倒数第二个li元素的内容的第二种方式:

from lxml import etree

html = etree.parse('hello.html')
result = html.xpath('//li[last()-1]/a/text()')

print(result)

使用requests和xpath爬取电影天堂

import requests
from lxml import etree

BASE_DOMAIN = 'http://www.dytt8.net'
HEADERS = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36',
'Referer': 'http://www.dytt8.net/html/gndy/dyzz/list_23_2.html'
}

def spider():
    url = 'http://www.dytt8.net/html/gndy/dyzz/list_23_1.html'
    resp = requests.get(url,headers=HEADERS)
    # resp.content:经过编码后的字符串
    # resp.text:没有经过编码,也就是unicode字符串
    # text:相当于是网页中的源代码了
    text = resp.content.decode('gbk')
    # tree:经过lxml解析后的一个对象,以后使用这个对象的xpath方法,就可以
    # 提取一些想要的数据了
    tree = etree.HTML(text)
    # xpath/beautifulsou4
    all_a = tree.xpath("//div[@class='co_content8']//a")
    for a in all_a:
        title = a.xpath("text()")[0]
        href = a.xpath("@href")[0]
        if href.startswith('/'):
        detail_url = BASE_DOMAIN + href
        crawl_detail(detail_url)
        break

def crawl_detail(url):
    resp = requests.get(url,headers=HEADERS)
    text = resp.content.decode('gbk')
    tree = etree.HTML(text)
    create_time = tree.xpath("//div[@class='co_content8']/ul/text()")[0].strip()
    imgs = tree.xpath("//div[@id='Zoom']//img/@src")
    # 电影海报
    cover = imgs[0]
    # 电影截图
    screenshoot = imgs[1]
    # 获取span标签下所有的文本
    infos = tree.xpath("//div[@id='Zoom']//text()")
    for index,info in enumerate(infos):
    if info.startswith("◎年  代"):
        year = info.replace("◎年  代","").strip()

    if info.startswith("◎豆瓣评分"):
        douban_rating = info.replace("◎豆瓣评分",'').strip()
        #print(douban_rating)

    if info.startswith("◎主  演"):
        # 从当前位置,一直往下面遍历
        actors = [info]
        for x in range(index+1,len(infos)):
            actor = infos[x]
            if actor.startswith("◎"):
            actors.append(actor.strip())
            print(",".join(actors))

if __name__ == '__main__':
spider()

从giebook上复制过来的,博客园的markdown好像对格式不兼容,缩进没办法显示

python在lxml中使用XPath语法进行#数据解析的更多相关文章

  1. Python爬虫利器三之Xpath语法与lxml库的用法

    前面我们介绍了 BeautifulSoup 的用法,这个已经是非常强大的库了,不过还有一些比较流行的解析库,例如 lxml,使用的是 Xpath 语法,同样是效率比较高的解析方法.如果大家对 Beau ...

  2. 12.Python爬虫利器三之Xpath语法与lxml库的用法

    LXML解析库使用的是Xpath语法: XPath 是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 XPath可以用来提取信息 XPath比 ...

  3. python爬虫(8)--Xpath语法与lxml库

    1.XPath语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历.XPath 是 W3C XSLT 标准的主要元素,并且 XQuery ...

  4. python爬虫之路——初识lxml库和xpath语法

    lxml库:是xml解析库,也支持html文档解析功能,实用功能:自动修正补全html代码. 使用流程:①导入lxml中的etree库,②利用etree.HTML(文件名)或etree.parse(本 ...

  5. 使用 lxml 中的 xpath 高效提取文本与标签属性值

    以下代码在 python 3.5 + jupyter notebook 中运行测试无误! # 我们爬取网页的目的,无非是先定位到DOM树的节点,然后取其文本或属性值 myPage = '''<h ...

  6. Spider-scrapy 中的 xpath 语法与调试

    把setting中的机器人过滤设为False ROBOTSTXT_OBEY = False 1 语法 artcile 选取所有子节点 /article 选取根元素 artile article/a 选 ...

  7. Python 通过lxml遍历html xpath

    #coding:utf-8 ''' Created on 2017年10月9日 @author: li.liu ''' from selenium import webdriver from lxml ...

  8. 【python】lxml中多个xml采用相同节点时出现的问题

    今天突然发现了一个lxml的坑. 假设我们有一个节点 <id>123</id> 有两个父节点都要用上述节点,则必须把上面的节点写两遍!用同一个会出错! 出错例子: #!/usr ...

  9. 使用python处理selenium中的xpath定位元素的模糊匹配问题

    # 用contains,寻找页面中style属性值包含有sp.gif这个关键字的所有div元素,其中@后面可以跟该元素任意的属性名. self.driver.find_element_by_xpath ...

随机推荐

  1. java excel转pdf 工具类

    package com.elitel.hljhr.comm.web.main.controller; import java.io.File; import java.io.FileOutputStr ...

  2. LVM逻辑卷的管理和使用

    本篇将从头到尾演示一遍逻辑卷的管理. 主要步骤 1.创建lv逻辑卷步骤     前提:先创建3个磁盘分区,类型为8e:         1.PV创建             pvcrete /dev/ ...

  3. 截取Excel字符串的部分字符

    截取Excel字符串的部分字符 我们可以使用Mid.Left.Right等函数从长字符串内获取一部分字符.  ①LEFT函数:  LEFT(text,num_chars)  Text是包含要提取字符的 ...

  4. reactnative调研

    /**   * This function parses the exported methods inside RCTBridgeModules and   * generates an array ...

  5. swift菜鸟入门视频教程-02-基本运算符

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mengxiangyue/article/details/32435435 本人自己录制的swift菜 ...

  6. Perl中的字符串操作函数

    1.$position = index(string,substring,skipchars): 该函数返回子串substring在字符串string中的位置,如果不存在,则返回-1:参数skipch ...

  7. Server Error in '/' Application. 报错

    控制面板--管理工具--服务--asp.netstate service 设置为自动,并启动

  8. 实用技巧:利用Excel实现客户档案的统一管理

    背景: 一个朋友新开了家门市,生意不错,客源旺盛. 有次我们喝茶时,他透露一个问题,就是客户的档案管理很不理想,都是纸面的,很容易丢失,也不方便查找. 我自诩混迹IT界多年,当然要替好友解决这个小麻烦 ...

  9. HDU 3292 【佩尔方程求解 && 矩阵快速幂】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=3292 No more tricks, Mr Nanguo Time Limit: 3000/1000 M ...

  10. BootstrapTable返回结果集递增序号

    { 'field': '', 'title': '序号', 'align': 'center', 'width': '5%', 'formatter': function (value, row, i ...