python爬虫——xpath

python爬虫——xpath

解析原理

  1. 实例化一个etree对象,且将网页源码数据加载到该对象中
  2. 调用etree对象中的xpath方法,使用xpath表达式实现标签的定位和内容的捕获

环境的安装:lxml(from lxml import etree)

etree对象的实例化

  1. 用本地的源码数据进行实例化
    etree.parse(‘path’)
  2. 将从互联网中捕获的源码数据加载到该对象中
    etree.HTML(‘page_text’)

xpath表达式:

  1. /:表示的是从根节点开始定位,表示的是一个层级。
  2. //: 表示的多个层级,若在开头表示为从任一个标签开始定位
  3. 属性定位:[@attrName=“attrView” ]
    例如:[@div=“song”]
  4. 索引定位:标签[索引值] 。索引从1开始
    例如://div[@div=“song”]/li[5]/a
  5. 获得文本内容:返回值为列表
    /text():只能获取标签直系的文本内容
    //text():能获取标签下的所有内容
  6. 获得属性:返回值为列表
    /@属性值
    例如:/@src
  7. 同时捕获多个标签: | 标签a | 标签b

实例:58同城标题爬取

import requests
from lxml import etree

if __name__ == '__main__':
    url =  'https://wh.58.com/ershoufang/'

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

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

    #创建etree对象
    tree = etree.HTML(page_text)
    #使用xpath表达式实现定位
    list_li = tree.xpath('//ul[@class="house-list-wrap"]/li')

    fp = open('./58.txt', 'w', encoding='utf-8')

    for li in list_li:
        #,表示从该li标签开始定位,所得到的列表取第一个元素
        title = li.xpath('./div[2]/h2/a/text()')[0]

        fp.write(title + '\n')

    print('over')
    fp.close()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值