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

关于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日

悬赏问题

  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法