python - 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 的返回值,我非常感谢帮助
解决方案
这不是您的代码的问题,而是特定网页的构建方式问题。他们必须在某个时候使用 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 是一个流行的选择。
推荐阅读
- mysql - 如果在spring数据jpa查询中为null返回空白
- c++ - 打印两个整数之间的偶数
- javascript - 根据从数据库中获取的值打开表单
- nginx - Odoo 13 网络资产失败
- unity3d - 如何绘制路径轨迹像下面的游戏参考统一
- microcontroller - 使用 UART 同步两个微控制器之间的串行通信的最佳方法是什么?
- php - 如何在codeigniter中限制同一用户多次登录另一个系统
- google-cloud-platform - 将子域重定向到谷歌云
- php - Laravel 6 - Illuminate\Database\Eloquent\RelationNotFoundException 调用未定义的关系
- php - “错误:插入”非特定插入错误