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
----------------分割线-----------------
"""
相关推荐
重生之高冷汉堡包6 小时前
YouTube 数据抓取出现 429/403 错误?2026 反爬机制拆解与爬虫选型指南
爬虫
钱栈up8 小时前
扫完 3.5 万文件后,我发现了 521 组散落的同名文件
爬虫·python·数据分析
B2_Proxy11 小时前
aiohttp 异步爬虫如何配置代理?连接池复用与超时控制实战
爬虫
SEO_juper12 小时前
给网页做可引用性评分:判断内容够不够让 AI 引用(GEO 工具,附代码)
开发语言·人工智能·爬虫·python·seo·独立站
雪雪爱冲浪12 小时前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
要吃这碗饭12 小时前
JavaScript 网络爬虫教程(2026)
开发语言·javascript·爬虫
重生之高冷汉堡包13 小时前
JavaScript 网络爬虫教程(2026)
大数据·网络·爬虫·安全
深蓝电商API14 小时前
爬虫任务调度:从crontab到Airflow的进阶路线
爬虫·crontab·airflow
梦帮科技1 天前
Kali Linux Scapy 畸形报文构造学——深度解剖非法 TCP Flags 与反常序列号
linux·爬虫·神经网络·算法·数学建模·系统架构·模拟退火算法
深蓝电商API1 天前
住宅代理、机房代理、原生IP:2026选型指南
爬虫·原生ip·住宅代理·机房代理