有没有办法打印这个未显示的标签文本? [复制]
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.parser 和 html5lib:
<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&p=1
)。
值 251 可能会在通过 JavaScript 加载 DOM 后添加到客户端。
我会通过这个答案Web-scraping JavaScript page with Python 了解更多尝试提取该 JavaScript 值的方法。
【讨论】:
以上是关于有没有办法打印这个未显示的标签文本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在没有额外库的情况下使用 LuaJIT 和 SDL2 将文本打印到屏幕上?