有没有办法打印这个未显示的标签文本? [复制]

Posted

技术标签:

【中文标题】有没有办法打印这个未显示的标签文本? [复制]【英文标题】:Is there a way to print this unshowed tag text? [duplicate] 【发布时间】:2021-04-08 19:15:20 【问题描述】:

我正在尝试抓取网页清单,但问题是它们没有出现在我的 Python 脚本的输出中

这是出现在导航器上的原始标签,带有我要抓取的文本:

<span class="currentInv">251</span>
" in stock"

这是使用 beautifulsoup 作为库和 lxml 作为解析器解析后的标签,我什至尝试了其他解析器,例如 html.parserhtml5lib

<span class="currentInv"></span>

这是我的完整 Python 脚本:

import requests 
from bs4 import BeautifulSoup as bs

url = f'https://www.hancocks.co.uk/buy-wholesale-sweets?warehouse=1983&p=1' 
parser = 'lxml' 
headers = 'User-Agent' : 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

response = requests.get(url, headers=headers) 
data = response.text 
soup = bs(data, parser)

print(soup.find('span', class_ = 'currentInv').text)

输出为空

我反复尝试了很多次,但似乎没有什么对我有用

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您在浏览器中看到的页面很可能包含动态内容。这意味着,当您检查页面时,您会看到一些 javascript 代码运行并操作浏览器中呈现的 DOM 后的最终结果。当您使用 Beautiful Soup 在 Python 代码中加载相同的页面时,您将获得来自请求的原始 HTML。动态内容的 JavaScript 代码未执行,因此您不会看到相同的结果。

一种解决方案是使用 Selenium 代替 Beautiful Soup。 Selenium 将在浏览器中加载页面并提供与该页面交互的 API。

【讨论】:

【参考方案2】:

因此,如果您查看页面的源代码,您将看到发送到页面的服务器端渲染 HTML 实际上在该 span 标记中也不包含任何值。 (即view-source:https://www.hancocks.co.uk/buy-wholesale-sweets?warehouse=1983&amp;p=1)。

值 251 可能会在通过 JavaScript 加载 DOM 后添加到客户端。

我会通过这个答案Web-scraping JavaScript page with Python 了解更多尝试提取该 JavaScript 值的方法。

【讨论】:

以上是关于有没有办法打印这个未显示的标签文本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?

Python argparse:有没有办法控制帮助文本的空白? [复制]

打印预览中未显示文本

有没有办法在 tkinter 中正确显示标签边框?

截面标签中的长文本未正确显示

Xcode 导航栏、标签栏、表格视图标题未显示