python爬虫----使用xpath解析数据


前言

爬虫数据提取的第三种方式,一般我们常用的爬虫方式,今天是xpath方法解析数据了。其实也还有其他的,像css选择器等。不过我们常用的大概就是这三种解析方式了。BeautifulSoup解析,正则表达式解析,以及现在的xpath解析。
其实爬虫基础内容其实也就是这么多了,接下来重点可能会放在反爬、解密之类的,以及加快爬取效率。

一、xpath是什么?

XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言,它最初是用来搜寻XML文档的,但是它同样适用于HTML文档的搜索

它的操作原理:
1.实现标签的定位:实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。

二、实例分析

1.使用xpath提取数据

代码如下(示例):

url = "https://nanchang.zbj.com/search/f/?type=new&kw=saas&fr=search-history"
requ = requests.get(url)
html = etree.HTML(requ.text)
#print(requ.text)
divs = html.xpath("/html/body/div[6]/div/div/div[2]/div[5]/div[1]/div")
#print(divs)
data =[]
for div in divs:
    # /html/body/div[6]/div/div/div[2]/div[5]/div[1]/div[1]/div/div/a[1]/div[2]/div[1]/span[1]
    try:
        price = div.xpath("./div/div/a[1]/div[2]/div[1]/span[1]/text()")[0].strip("¥")
        #print(price)
        title = "saas".join(div.xpath("./div/div/a[1]/div[2]/div[2]/p/text()"))
        #print(title)
        chengjiao = div.xpath("./div/div/a[1]/div[2]/div[1]/span[2]/text()")[0]
        #print(chengjiao)
        company = div.xpath("./div/div/a[2]/div[1]/p/text()")[1].replace("\n","")
        #print(company)
        data.append([price,title,chengjiao,company])

    except IndexError:
        pass

根据解析原理我们知道,首先我们需要实例化一个etree对象
然后呢我们在调用etree对象中的xpath方法进行数据提取。

实例化对象有两种:
1.将本地文档加载入etree对象中。etree.parse(“文件路径”)
2.将互联网中获取的数据加载入etree对象中。 etree.HTML(“储存数据的对象”)

然后便可以进行数据提取了

提取的时候我们可以根据观察开发者工具中代码,一步一步定位到所需内容下,当然一定要保证是正确的,如果出错的话是得不到结果的。
本次实例我们是需要得到一个div标签下很多div标签中内容的。
所以我们首先定义了一个divs的对象,来储存定位到本div标签的内容。然后便可以对其进行循环操作。
并且在循环中运用xpath解析时,我们只需要在当前路径下,在继续定位便可。
其实也有一种简单的方法,可以直接在开发者工具中复制标签的xpath路径,我们一般可以选择绝对路径,然后根据对比去删除前边不需要的,这样我们就能够得到锁定为到的内容。
这个解析方式其实是很简单的一种了。
当然,在爬取过程中也碰到了很多问题,想其中有一个数据是没有我们定位到的标签的,它并不是我们所需要的内容。所以我使用了异常处理的操作,将其pass过去了。
以及我们获取到的数据可能会存在一些其他字符等,我们不需要的,同样也是对其进行处理,最后便得到了最终的数据。

2.保存数据

代码如下(示例):

    with open("saas相关数据.csv","w",encoding="utf-8",newline="") as f:
        csvwriter = csv.writer(f)
        csvwriter.writerows(data)
    print("over!")

本步操作同样是讲数据存储在了csv文件中,

总结

爬虫数据的解析其实也只是基础中的一部分,经过学习了三种方法之后,我也会更加深入的学习更多有用的知识,把爬虫应用到更多的操作中。
当然在爬取过程中,我觉得最难得并不是爬取方法,而是对于整个过程的逻辑结构以及步骤的掌握程度。
所以我认为,我们不能只是单纯的学习方法,同时也需要增强对结构分析这类的能力进行一个拓展学习。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测开小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值