爬虫之xpath

一、xpath的语法


xpath是用来对XML文件进行解析的。


针对如下的XML文件:


<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>

<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

<book category="WEB">
  <title lang="en">XQuery Kick Start</title>
  <author>James McGovern</author>
  <author>Per Bothner</author>
  <author>Kurt Cagle</author>
  <author>James Linn</author>
  <author>Vaidyanathan Nagarajan</author>
  <year>2003</year>
  <price>49.99</price>
</book>

<book category="WEB">
  <title lang="en">Learning XML</title>
  <author>Erik T. Ray</author>
  <year>2003</year>
  <price>39.95</price>
</book>

</bookstore>


/:表示路径;

//:表示所有;

[]:表示内容;

@:表示属性;

text():表示文本;

.:表示当前节点;

..:表示上一节点;


实例:


1. 取出bookstore中的第一个book


/bookstore/book[0]


2. 取出bookstore下的所有book


/bookstore//book


或者直接


//book


3. 获取所有title的文本


/bookstore//book/title[@lang="en"]/text()

或者


//title/text()


4. 获取title的语言类别


//title/@lang


5. 模糊查询


<div id="qiushi_tag_011">...</div>
<div id="qiushi_tag_021">...</div>
<div id="qiushi_tag_031">...</div>
<div id="qiushi_tag_041">...</div>
<div id="qiushi_tag_051">...</div>

此时可使用模糊查询来匹配所有的节点:


//div[contains(@id, "qiushi_tag")]


注意:使用/来表示路径时,必须一级一级地来,使用//来表示时,可以跨节点。


二、xpath的使用


对于未使用scrapy框架的代码来说,需要将爬取的html文件转换为XML文件,才能使用xpath来解析


需要导入lxml中的etree


#coding:utf-8

import urllib.request
from lxml import etree

link="http://tieba.baidu.com/f?kw=lol&pn=1"

request = urllib.request.Request(link)
html = urllib.request.urlopen(request).read()

# 解析
content = etree.HTML(html)

# 取出帖子里每层层主发送的图片连接集合
#link_list = content.xpath('//img[@class="BDE_Image"]/@src')

link_list = content.xpath(
    '//div[@class="threadlist_detail clearfix"]//li/a/img/@data-original'
    )

# 取出每个图片的连接
for link in link_list:
    print(link)


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值