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
----------------分割线-----------------
"""
相关推荐
裤裤兔3 小时前
python爬取pdf文件并保存至本地
chrome·爬虫·python·pdf·网络爬虫
beijingliushao3 小时前
95-Python爬虫-正则表达式
爬虫·python·正则表达式
百***06013 小时前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
失败又激情的man3 小时前
爬虫逆向之360磐云盾案例(某政府网站)
爬虫
interception4 小时前
爬虫逆向:websocket实战案例,全国建筑市场
爬虫·websocket·网络协议
q***31899 小时前
爬虫基础之爬取某基金网站+数据分析
爬虫·数据挖掘·数据分析
ycydynq18 小时前
自动化爬虫selenium
爬虫·selenium·自动化
sanggou20 小时前
【Python爬虫】手把手教你从零开始写爬虫,小白也能轻松学会!(附完整源码)
开发语言·爬虫·python
全栈陈序员1 天前
基于Rust 实现的豆瓣电影 Top250 爬虫项目
开发语言·爬虫·rust