首页 > 编程语言 >Python爬虫学习五:常用-xpath

Python爬虫学习五:常用-xpath

时间:2022-10-31 13:01:26浏览次数:41  
标签:xpath etree Python text tree 爬虫 div class


文章目录

  • ​​一、xpath解析原理​​
  • ​​二、环境的安装​​
  • ​​三、如何实例化一个etree对象​​
  • ​​第一步:引入对象​​
  • ​​第二步:加载对象​​
  • ​​方法一:将本地的html文档中的源码数据加载到etree对象中​​
  • ​​方法二:将从互联网上获取的源码数据加载到该对象中```etree.HTML('page_text')```​​
  • ​​第三步:使用etree​​
  • ​​四、表达式说明​​
  • ​​五、实战​​


背景:xpath解析:最常用且最便捷高效的一种解析方式。通用性最高。

一、xpath解析原理

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

二、环境的安装

​pip install lxml​

三、如何实例化一个etree对象

第一步:引入对象

​from lxml import etree​

第二步:加载对象

方法一:将本地的html文档中的源码数据加载到etree对象中

​etree.parse(filePath)​

方法二:将从互联网上获取的源码数据加载到该对象中etree.HTML('page_text')

第三步:使用etree

​xpath('xpath表达式')​

四、表达式说明

  • /:表示的是从根节点开始定位。表示的是一个层级。
  • //:表示的是多个层级。可以表示从任意位置开始定位。
  • 属性定位:​​//div[@class='song'] tag[@attrName="attrValue"]​
  • 索引定位:​​//div[@class="song"]/p[3]​​索引是从1开始的。
  • 取文本:
  • ​/text()​​获取的是标签中直系的文本内容
  • ​//text()​​标签中非直系的文本内容(所有的文本内容)
  • 取属性:​​/@attrName ==>img/src​
#!/usr/bin/env python 
# -*- coding:utf-8 -*-
from lxml import etree
if __name__ == "__main__":
#实例化好了一个etree对象,且将被解析的源码加载到了该对象中
tree = etree.parse('test.html')
# r = tree.xpath('/html/body/div') #获取html下面的body下面的div
# r = tree.xpath('/html//div')#获取html下面的多个层级的div
# r = tree.xpath('//div')#获取多个层级的div
# r = tree.xpath('//div[@class="song"]')#获取多个层级的div并且标签里面的class为song
# r = tree.xpath('//div[@class="tang"]//li[5]/a/text()')[0]#获取多个层级的div并且标签里面的class为tang下面的多个层级的第五个li标签下的a标签里面的内容
# r = tree.xpath('//li[7]//text()')#多个层级的第七个li下的所有内容
# r = tree.xpath('//div[@class="tang"]//text()')#多个层级的div标签下的class为tang下的所有内容
r = tree.xpath('//div[@class="song"]/img/@src')#多个层级的div标签下的class为song下的img属性的内容
print(r)

五、实战

爬取强国内容

import requests
from lxml import etree

if __name__ == '__main__':
content = input("请输入内容:")
# step_1:指定url
url = 'http://www.syiban.com/search/index/init.html?modelid=1&q=' + content
# step_2:发起请求
# get方法会返回一个响应对象
response = requests.get(url=url)
# step_3:获取响应数据.text返回的是字符串形式的响应数据
page_text = response.text
tree = etree.HTML(page_text)
question = tree.xpath('//span[@class="title_color"]')
answer = tree.xpath('//div[@class="yzm-news-right"]/p/span')
print(question)
for index, value in enumerate(question):
print(question[index].xpath('string()'))
print(answer[index].xpath('string()'))
# step_4:持久化存储
with open('./强国.html', 'w', encoding='utf-8') as fp:
fp.write(page_text)
print('爬取数据结束!!!')


标签:xpath,etree,Python,text,tree,爬虫,div,class
From: https://blog.51cto.com/u_15854304/5809208

相关文章