米械x 2021-12-06 18:59 采纳率: 100%
浏览 648
已结题

关于xpath返回空列表的问题

问题遇到的现象和发生背景

为什么下面一个xapth取不到内容返回的是一个空的列表,
但是xpath是正确的啊

img

img

问题相关代码,请勿粘贴截图

import requests
import os
from lxml import etree

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/527.36 (KHTML, like Gecko)'
' Chrome/96.0.8664.55 Safari/537.36 Edg/56.0.054.43'}
picture_e = 'picture_e'
if not os.path.exists(picture_e):
os.mkdir(picture_e)
url = 'https://www.vilipix.com/tags/%E5%A5%B3%E3%81%AE%E5%AD%90/illusts'
fn_q = requests.get(url, headers=headers)
html_q = fn_q.text
dy_q = etree.HTML(html_q)
fn_li_q = dy_q.xpath('//*[@class="illust"]//img/@alt')
print(fn_li_q)

运行结果及报错内容

C:\Users\21905\Documents\PythonProject\reptile\venv\Scripts\python.exe
[]

进程已结束,退出代码为 0

我的解答思路和尝试过的方法

xpath定位我写过几个代码有时候有用有时候没用,感觉就特别玄学。

我想要达到的结果

得到网页图片下的名字

  • 写回答

1条回答 默认 最新

  • 关注

    你这个网页中的内容是通过js代码读取外部json数据来动态更新的。
    requests只能获取网页的静态源代码,动态更新的内容取不到。
    对于动态更新的内容要用selenium 来爬取。

    或者是通过F12控制台分析页面数据加载的链接,找到真正json数据的地址进行爬取。

    在页面上点击右键,右键菜单中选 "查看网页源代码"。

    img


    这样看到的才是网页的静态源代码。
    如果这个网页的静态源代码中有你需要爬取的内容,就说明该页面没有动态内容,可以用requests爬取。
    否则就说明该页面的内容是动态更新的,要用selenium 来爬取.

    你题目的解答代码如下:

    from selenium import webdriver
    import time
    import os
    from lxml import etree
    
    url = 'https://www.vilipix.com/tags/%E5%A5%B3%E3%81%AE%E5%AD%90/illusts'
    driver = webdriver.Chrome()
    driver.get(url)
    time.sleep(3)
    html_q = driver.page_source
    dy_q = etree.HTML(html_q)
    fn_li_q = dy_q.xpath('//*[@class="illust"]//img/@alt')
    print(fn_li_q)
    

    img

    如有帮助,望采纳!谢谢!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 已采纳回答 12月7日
  • 创建了问题 12月6日

悬赏问题

  • ¥15 请问各位,如何在Jetson nano主控板的Ubuntu系统中安装PyQt5
  • ¥15 MAC安装佳能LBP2900驱动的网盘提取码
  • ¥400 微信停车小程序谁懂的来
  • ¥15 ATAC测序到底用什么peak文件做Diffbind差异分析
  • ¥15 安装ubantu过程中第一个vfat 文件挂载失败
  • ¥20 GZ::CTF如何兼容一些靶机?
  • ¥15 etcd集群部署问题
  • ¥20 谁可以帮我一下问一下各位
  • ¥15 为何重叠加权后love图的SMD与svyCreateTableOne函数绘制基线表的不一致
  • ¥150 求 《小魔指》街机游戏机整合模拟软件