爬虫---xpath解析

xpath是常用且最便捷高效的一种解析方式,具有通用性。

—xpath解析原理

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

  • 调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕捉

—环境安装

pip install lxml

—如何实例化一个etree对象:from lxml import etree

  • 将本地的html文档中的源码数据加载到etree对象中:etree.parse(filepath)
  • 可以将从互联网上获取的源码数据加载到该对象中:etree.HTML(‘page_text’)
  • xpath(‘xpath表达式’)

—xpath表达式:

  • /:表示的是从根节点开始定位,表示的是一个层级。
  • //:表示多个层级。可以表示从任意位置开始定位
  • 属性定位://div[@class=‘className’] tag[@attrName=“attrVal”]
  • 索引定位://div[@class=‘className’]/p[3] 索引是从1开始的
  • 取文本: text() 获取标签中直系文本内容 ;//text() 获取标签中非直系的文本内容(所有文本内容)
  • 取属性: /@attrName

实例

爬取58同城二手房信息:

# 开发时间:2020/12/21 14:14
# 开发工具:PyCharm
# 开发者:Friday
import requests
from lxml import etree
if __name__ == "__main__":
    headers = {
          'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

    }

    #爬取页面源码数据
    url = 'https://hs.58.com/ershoufang/'
    page_text = requests.get(url=url,headers=headers).text

    #数据解析
    tree = etree.HTML(page_text)
    #存储title
    fp = open('58.txt','w',encoding='utf-8')
    #存储li标签对象
    li_list = tree.xpath('//ul[@class="house-list-wrap"]/li')
    #存储title的页面url
    url_list = tree.xpath('//ul[@class="house-list-wrap"]/li/div[2]/h2/a/@href')
    for li in li_list:
        #局部解析

        price = li.xpath('./div[3]/p/b/text()')[0]+'万'
        single_price = li.xpath('./div[3]/p[2]/text()')[0]
        print(price)
        print(single_price)

    for url in url_list:
        title_text = requests.get(url=url, headers=headers).text
        tree2 = etree.HTML(title_text)
        title = tree2.xpath('//div[@class="main-wrap"]/div[1]/h1/text()')[0]
        print(title)

爬取的次数太多了导致查看的时候需要验证码,还不会处理这种情况,所以先暂时这样,代码没有问题,可以获取房屋主题,价格以及每平方米的价格。还需要完善,将其相对应地保存到文件中,并学习解决此类异常的办法,估计需要用到自动识别验证码。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值