Python之Xpath爬虫基础解析

在爬虫中,数据解析方法有很多种,比如正则表达式、bs4、Xpath、pyquery等,这个专栏所涉及到的爬虫主要以Xpath为主。

Xpath解析:最常用且最便捷高效的一种解析方式,通用性强。

1. Xpath解析原理

(1)实例化一个etree对象,且需要将被解析的页面源码数据加载到该对象中;

(2)调用etree对象中的Xpath方法结合Xpath表达式实现标签的定位和内容的获取。

2. 环境的安装

pip install lxml

3. 实例化一个etree对象(两种情况:本地与网站)

首先,先导入lxml中的etree包。

from lxml import etree

(1)第一种情况:将本地的html文档中的源码数据加载到etree对象中;

tree = etree.parse(filepath)

(2)第二种情况:将从互联网上获取到的源码数据加载到该对象中;

tree = etree.HTML(text)

4. Xpath表达式

(1)/:单斜杠从根节点开始定位,表示一个层级;比如:'/html/body/div',一层一层递进;

(2)//:双斜杠可以从任意位置开始定位,表示多个层级;比如:'//div',直接跳到指定位置;

(3)属性定位://div[@class='xxx']  其中,div为网页的块状标签,class为该div标签的唯一属性值;

(4)索引定位://div[@class='xxx']/p[3] 直接跳到class为'xxx'的div标签,再跳下一层第三个p标签(索引从1开始);

(5)取文本:

         /text() 获取的是标签中直系的文本内容;

        //text() 获取的是标签中非直系的文本内容(指定标签下所有的文本内容);

#/text()例:
r = tree.xpath('//div[@class="tang"]//li[5]/a/text()')[0]
#获取 class为'tang'的div标签 --> 第5个li标签 --> a标签 --> 文本内容列表的第一个元素

#//text()例:
r = tree.xpath('//li[7]//text()') #获取第7个li标签下的所有文本内容

(6)取属性:/@attrName  (attrName为属性名,比如:图片img/src)

#例如:
r = tree.xpath('//div[@class="song"]/img/src')

5. Xpath之简单实战-爬取58同城北京二手房的房源信息

(1)导入相关Python包

from lxml import etree
import requests

(2)指定url

url = 'https://bj.58.com/ershoufang/'

(3)进行UA伪装

headers = {
    'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36'
}

(4)请求发送

page_text = requests.get(url=url, headers=headers).text

(5)数据解析

tree = etree.HTML(page_text)
li_list = tree.xpath('//ul[@class="house-list-wrap"]/li') #存储的就是li标签对象

(6)持久化存储

fp = open('58.txt', 'w', encoding='utf-8')
for li in li_list:
    title = li.xpath('./div[2]/h2/a/text()')[0] #获取小区名称
    price = li.xpath('./div[3]/p/b/text()')[0] + '万' #获取小区房价
    print(title + ',' + price)
    fp.write(title + ',' + price + '\n')

6. 这只是Xpath的入门案例,后续还有更详细的爬虫实战案例,尽情期待!欢迎大家访问我的专栏,一起学习,一起进步,奥里给!

 

 

                                       来都来了,确定不留下点什么嘛,嘻嘻~

                                                                    

你可能感兴趣的:(爬虫Xpath,python,xpath,爬虫)