爬虫-xpath 匹配

/ 从根标签开始 必须具有严格的父子关系
// 从当前标签 后续节点含有即可选出

列题

import lxml.html

test_data = """
        <div>
            <ul>
                 <li class="item-0"><a href="link1.html" id="places_neighbours__row">9,596,960first item</a></li>
                 <li class="item-1"><a href="link2.html">second item</a></li>
                 <li class="item-inactive"><a href="link3.html">third item</a></li>
                 <li class="item-1"><a href="link4.html" id="places_neighbours__row">fourth item</a></li>
                 <li class="item-0"><a href="link5.html">fifth item</a></li>
                 <li class="good-0"><a href="link5.html">fifth item</a></li>
             </ul>
             <book>
                    <title lang="aaengbb">111111</title>
                    <price id="places_neighbours__row">29.99</price>
            </book>
            <book>
                <title lang="zh">222222</title>
                <price>39.95</price>
            </book>
            <book>
                <title>33333</title>
                <price>40</price>
            </book>
         </div>
        <a>
            <book>
                <title>123</title>
            </book>

        </a>
        
        """

"""

* 通配符,选择所有
//div/book[1]/title 选择div下第一个book标签的title元素
//div/book/title[@lang="zh"]选择title属性含有lang且内容是zh的title元素
//div/book/title //book/title //title //div//title 具有相同的结果,因为使用相对路径最终都指向title
//book/title/@* 将title所有的属性值选择出来
//book/title/text() 将title的内容选择出来,使用内置text()函数
//a[@href="link1.html" and @id="places_neighbours__row"] 
//a[@href="link1.html" or @id="places_neighbours__row"]
//div/book[last()]/title/text() 将最后一个book元素选出
//div/book[price > 39]/title 将book子标签price数值大于39的选择出来
//li[starts-with(@class,'item')] 将class属性前缀是item的li标签选出
//title[contains(@lang,'eng')] 将title属性lang含有eng关键字的标签选出
"""


html = lxml.html.fromstring(test_data)

#html_data = html.xpath('//div/book/title/text()')
#html_data = html.xpath('//div/book[1]/title/text()')
#html_data = html.xpath('//div/book/title[@lang="zh"]/text()')
#html_data = html.xpath('//div/book/title/text()')
# html_data = html.xpath('//book/title/text()')
# html_data = html.xpath('//title/text()')
# html_data = html.xpath('//div//title/text()')
# html_data = html.xpath('//book/title/@*')

# html_data = html.xpath('//a[@href="link1.html" and @id="places_neighbours__row"]/text()')
#html_data = html.xpath('//a[@href="link2.html"]/text()')
# html_data = html.xpath('//div/ul/li/a[@id]/text()')
# html_data = html.xpath('//a[@href="link1.html" and @id="places_neighbours__row"]/@*')
# html_data = html.xpath('//a[@href="link1.html" and @id="places_neighbours__row"]/@href')
# html_data = html.xpath('//a[@href="link1.html" or @id="places_neighbours__row"]/text()')
# html_data = html.xpath('//div/book[last()]/title/text()')
#html_data = html.xpath('//div/book[price > 39]/title/text()')
# html_data = html.xpath('//li[starts-with(@class,"item")]/a/text()')
html_data = html.xpath('//title[contains(@lang,"eng")]/text()')

for i in html_data:
    print(i)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!要使用Python进行爬虫并解析网页内容,可以使用xpath进行数据提取。我可以帮你了解如何使用xpath进行爬虫。 首先,你需要安装相关的库。在Python,你可以使用`lxml`库来解析HTML或XML文档,并使用`requests`库来发送HTTP请求并获取网页内容。你可以使用以下命令安装这些库: ``` pip install lxml pip install requests ``` 安装完成后,你可以在Python脚本导入这些库: ```python import requests from lxml import etree ``` 接下来,你可以使用`requests`库发送HTTP请求来获取网页的内容。例如,你可以使用以下代码获取一个网页的内容: ```python url = "http://example.com" response = requests.get(url) html_content = response.text ``` 获取到网页内容后,你可以使用`lxml`库的`etree.HTML`函数将其转换为可供解析的HTML对象。然后,你可以使用xpath表达式从HTML对象提取数据。例如,假设你要提取网页所有`<a>`标签的文本和链接,你可以使用以下代码: ```python html = etree.HTML(html_content) links = html.xpath("//a") for link in links: text = link.text href = link.get("href") print(text, href) ``` 在上述代码,`//a`是xpath表达式,用于匹配所有`<a>`标签。然后,通过遍历匹配结果,你可以获取每个`<a>`标签的文本和链接。 这只是一个简单的示例,你可以根据具体的网页结构和需求来编写更复杂的xpath表达式来提取数据。 希望这些信息能对你有所帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值