xpath解析基础及相关案例(58二手房信息爬取&&全国城市名称爬取)

xpath解析:最常用且最便捷高效的一种解析方式。通用性。
    - xpath解析原理:
        -1.实例化一个etree的对象,且需要将被解析的页面源码数据加载到该对象中。
        -2.调用etree对象中的xpath方法结合着xpath表达式实现标签的定位和内容的捕获。
    -环境的安装:
        -pip install lxml
    -如何实例化一个etree对象:from lxml import etree
        -1.将本地的html文档中的源码数据加载到etree对象中:etree.parse(filePath)
        -2.可以将从互联网上获取的源码数据加载到该对象中
            etree.HTML('page_text")
    - xpath( 'xpath表达式")
    - xpath表达式:
        -/∶表示的是从根节点开始定位。表示的是一个层级。-//:表示的是多个层级。可以表示从任意位置开始定位。
        -属性定位:[/div[@class='song'] tag [@attrName="attrValue"]
        -索引定位:/div [@class="song"//p[3]]索引是从1开始的。
        -取文本:
            -/text()获取的是标签中直系的文本内容
            -//text()标签中非直系的文本内容(所有的文本内容)
        -取属性:
            /@attrName    ==>img/src

-解决中文乱码方法:
    -手动设置响应数据的编码格式:
        response=requests.get(url=url,headers=headers)
        response.encoding='utf-8'
        page_text=response.text
    -通用处理中文乱码的解决方案
        img_name.encode('iso-8859-1').decode('gbk')

58二手房信息爬取

from lxml import etree
import requests

if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4506.400 '
    }
    url = 'https://xiangtan.58.com/ershoufang/?utm_source=market'
    page_text = requests.get(url=url, headers=headers).text
    # 数据解析
    tree = etree.HTML(page_text)
    div_list = tree.xpath('//section[@class="list"][1]/div')
    fp = open('58.txt', 'w', encoding='utf-8')
    for div in div_list:
        title = div.xpath('./a/div[2]/div//text()')[0]
        print(title)
        fp.write(title + '\n')

在这里插入图片描述

全国城市名称爬取

import requests
from lxml import etree

# 项目需求解析出所有城市多称https://www.aqistudy.cn/historydata/
if __name__ == '__main__':
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/73.0.3683.103 Safari/537.36 '
    }
    url = 'https://www.aqistudy.cn/historydata/'
    page_text = requests.get(url=url, headers=headers).text
    tree = etree.HTML(page_text)
    # 解析到热门城市和所有城市对应的a标签
    # //div [@class="bottom"]/ul/li/            热门城市a标签的层级关系
    # //div [@class="bottom"]/ul/div[2]/li/a    全部城市a标签的层级关系

    city_li_list = tree.xpath('//div[@class="bottom"]/ul/li | //div[@class="bottom"]/ul/div[2]/li')
    all_city_names = []
    # 解析到了页面中所有城市的城市名称
    for li in city_li_list:
        city_name = li.xpath('./a/text() ')[0]
        all_city_names.append(city_name)

    print(all_city_names, len(all_city_names))


在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值