首页 > 解决方案 > python lxml xtree没有从span获取数字

问题描述

我正在尝试学习如何为不同的事物使用不同的语言,并且我正在学习使用 lxml 进行网络抓取,目前我只是想从 html 中的跨度标题中获取假定的页码,但我一直返回 0或我通过 pages 变量尝试的每个命令的其他不同内容。

from lxml import html
import requests
    
url = 'https://mangadex.org'
page = requests.get(url)
tree = html.fromstring(page.content)
    
mangaLinks = tree.xpath('//a[@class="manga_title text-truncate "]//@href')
    
manga = requests.get(url+mangaLinks[0])
tree2 = html.fromstring(manga.content)
    
mangaChaptersLink = tree2.xpath('//a[@class="text-truncate"]/@href')
    
chapter = requests.get(url+mangaChaptersLink[0])
tree3 = html.fromstring(chapter.content)
    
pages = tree3.xpath('//span[@class="total-pages"]/text()')
    
print(pages)

我一直得到 0 的返回值,我非常感谢帮助

标签: pythonhtmlweb-scrapinglxml

解决方案


这不是您的代码的问题,而是特定网页的构建方式问题。他们必须在某个时候使用 javascript 来填充此值。这可以通过使用 curl 获取页面来证明:

curl https://mangadex.org/chapter/934446/1

我看:<span class="total-pages">0</span>由此。

这意味着您将不得不做一些更复杂的事情,在那里您发出与 javascript 相同的请求以获取总页数。

看起来你想要的是:https://mangadex.org/scripts/reader.min.js,但遗憾的是这似乎正在访问后端模型。这意味着要抓取您可能想要查看自动浏览器或其他东西(运行 javascript)的同一页面。Selenium 是一个流行的选择。


推荐阅读