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的入门案例,后续还有更详细的爬虫实战案例,尽情期待!欢迎大家访问我的专栏,一起学习,一起进步,奥里给!

 

 

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

                                                                    

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个使用PythonXPath爬虫的实例: ```python import requests from lxml import etree if __name__ == '__main__': url = 'https://pic.netbian.com/4kmeinv/' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36' } page_text = requests.get(url=url, headers=headers).text tree = etree.HTML(page_text) li_list = tree.xpath('//div[@class="slist"]/ul/li/a') if not os.path.exists('./piclibs'): os.mkdir('./piclibs') for li in li_list: detail_url = 'https://pic.netbian.com' + li.xpath('./img/@src')[0] detail_name = li.xpath('./img/@alt')[0 + '.jpg' detail_name = detail_name.encode('iso-8859-1').decode('GBK') detail_path = './piclibs/' + detail_name detail_data = requests.get(url=detail_url, headers=headers).content with open(detail_path, 'wb') as fp: fp.write(detail_data) print(detail_name, 'seccess!!') ``` 这个爬虫实例通过发送网络请求获取页面源码,然后使用lxml库中的etree模块将页面源码转化为可解析的HTML树对象。之后,使用XPath语法来提取页面中的数据,例如获取图片的URL和名称。最后,将图片保存到本地文件夹。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [四个Python爬虫案例,带你掌握xpath数据解析方法!](https://blog.csdn.net/lyc2016012170/article/details/124507352)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python中的xpath爬虫实例,新人处女作!!!](https://blog.csdn.net/Musica_l/article/details/120021669)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

数分小白龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值