96-爬虫XPath解析

1.XPath概述

XML Path Language

2.XPath解析操作

bash 复制代码
# -*- coding: utf-8 -*-
"""
@Project : 01-python-learn
@File    : demo16.py
@IDE     : PyCharm
@Author  : 刘庆东
@Date    : 2025/11/19 14:16
"""
from lxml import etree


# html_str = '''
# <div class="level_one on">
# <ul>
# <li>
#     <a href="/index/index/view/id/1.html" title="什么是Java" class="on">什么是Java</a>
#     <a>Java</a>
# </li>
# <li> <a href="javascript:" onclick="login(0)" title="Java的版本">Java的版本</a> </li>
# <li> <a href="javascript:" onclick="login(0)" title="Java API文档">Java API文档</a> </li>
# </ul>
# </div>
# '''
#
# html=etree.HTML(html_str)#解析html字符串
#
# #获取li节点中的所有的直接点a
# a_all=html.xpath('//li/a')
# print(a_all)
#
#
# a_txt=etree.tostring(a_all[1],encoding='utf-8')
# print("获取的html代码是:",a_txt.decode('utf-8'))


html_str = '''
<div class="level_one on">
<ul>
<li>
    <a href="/index/index/view/id/1.html" title="什么是Java" class="on">什么是Java</a>
    <a>Java</a> 
</li>
<li> <a href="javascript:" onclick="login(0)" title="Java的版本">Java的版本</a> </li>
<li> <a href="javascript:" onclick="login(0)" title="Java API文档">Java API文档</a> </li>
</ul>
</div>
'''

html=etree.HTML(html_str)#解析html字符串
#
# #获取ul节点中的所有子孙节点a
# a_all=html.xpath('//ul//a')
# print(a_all[3])
#
# a_txt=etree.tostring(a_all[3],encoding='utf-8')
# print("获取的html代码是:",a_txt.decode('utf-8'))

#获取a节点的父节点
a_parent=html.xpath('//a/..')
print(a_parent)
print(a_parent[0])

a_txt=etree.tostring(a_parent[0],encoding='utf-8')
print("获取的html代码是:",a_txt.decode('utf-8'))

3.爬取某网站的电影Top250

bash 复制代码
# -*- coding: utf-8 -*-
"""
@Project : 01-python-learn
@File    : demo18.py
@IDE     : PyCharm
@Author  : 刘庆东
@Date    : 2025/11/19 14:54
豆瓣电影数据爬取
https://movie.douban.com/top250
"""
# 导入模块 etree  导入时间  导入随机  导入网络请求
from lxml import etree
import time
import random
import requests

#伪装一下头信息
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 12.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}

#处理大量的空白的字符
def liubai(strs):
    #定义保存内容的字符
    s=''
    for n in strs:
        n=''.join(n.split())#去除空的字符
        s=s+n#拼接字符串
    return s

#获取电影的信息
def get_movie_info(url):
    #发送网络请求
    response = requests.get(url, headers=header)
    #解析html元素
    html=etree.HTML(response.text)
    #获取所有的层 div+css布局页面
    div_all=html.xpath('//div[@class="info"]')
    for div in div_all:
        # 获取电影名字信息
        names=div.xpath('./div[@class="hd"]/a//span/text()')
        name=liubai(names)
        # 获取导演主演信息
        infos=div.xpath('./div[@class="bd"]/p/text()')
        info=liubai(infos)
        # 获取电影评分
        scores=div.xpath('./div[@class="bd"]/div/span[2]/text()')
        score=liubai(scores)
        #作业 获取每一部电影有多少人评价
        # 作业  电影文字总结

        print("电影名字是:",name)
        print("导演主演:",info)
        print("电影评分:",score)
        print("----------------分割线-----------------")

if __name__ == '__main__':
    for i in range(0,250,25):
        url="https://movie.douban.com/top250?start={page}&filter=".format(page=i)
        get_movie_info(url)
        time.sleep(random.randint(1,3))


"""
部分输出结果如下:
电影名字是: 肖申克的救赎/TheShawshankRedemption/月黑高飞(港)/刺激1995(台)
导演主演: 导演:弗兰克·德拉邦特FrankDarabont主演:蒂姆·罗宾斯TimRobbins/...1994/美国/犯罪剧情
电影评分: 9.7
----------------分割线-----------------
电影名字是: 霸王别姬/再见,我的妾/FarewellMyConcubine
导演主演: 导演:陈凯歌KaigeChen主演:张国荣LeslieCheung/张丰毅FengyiZha...1993/中国大陆中国香港/剧情爱情同性
电影评分: 9.6
----------------分割线-----------------
电影名字是: 泰坦尼克号/Titanic/铁达尼号(港/台)
导演主演: 导演:詹姆斯·卡梅隆JamesCameron主演:莱昂纳多·迪卡普里奥Leonardo...1997/美国墨西哥/剧情爱情灾难
电影评分: 9.5
----------------分割线-----------------
电影名字是: 阿甘正传/ForrestGump/福雷斯特·冈普
导演主演: 导演:罗伯特·泽米吉斯RobertZemeckis主演:汤姆·汉克斯TomHanks/...1994/美国/剧情爱情
电影评分: 9.5
----------------分割线-----------------
电影名字是: 千与千寻/千と千尋の神隠し/神隐少女(台)/千与千寻的神隐
导演主演: 导演:宫崎骏HayaoMiyazaki主演:柊瑠美RumiHîragi/入野自由Miy...2001/日本/剧情动画奇幻
电影评分: 9.4
----------------分割线-----------------
"""
相关推荐
跨境数据猎手18 小时前
跨境商城反向海淘系统开发全流程逻辑(上)
人工智能·爬虫·系统架构
上海云盾-小余20 小时前
网站恶意爬虫拦截策略:智能识别与封禁实操方案
网络·爬虫·安全·web安全
小白学大数据1 天前
Scrapling:极简高效的 Python 智能爬虫框架
开发语言·爬虫·python·数据分析
深蓝电商API1 天前
爬虫任务调度系统:基于Celery的定时+触发式采集方案
爬虫
WL_Aurora1 天前
Python爬虫实战(七):Selenium自动化采集苏宁易购商品数据
爬虫·python·selenium
Python私教2 天前
Playwright MCP 用 a11y 树抓页面:比全量 DOM 省 token 的采集 Agent
爬虫
枫叶林FYL2 天前
项目九:异步高性能爬虫与数据采集中枢 —— 基于 Crawl<sub>4</sub>AI 与 Playwright 的现代化数据采集平台 项目总览
爬虫·python·深度学习·wpf
上海云盾-小余2 天前
恶意爬虫精准拦截:网站流量净化与资源守护方案
网络·爬虫·web安全
小白学大数据2 天前
深度探索:Python 爬虫实现豆瓣音乐全站采集
开发语言·爬虫·python·数据分析
烟雨江南aabb2 天前
Python第六弹:python爬虫篇:什么是爬虫
开发语言·爬虫·python