【问题标题】: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)

输出为空

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

任何帮助将不胜感激。

【问题讨论】:

    标签: python python-3.x web-scraping beautifulsoup python-requests


    【解决方案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 值的方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-29
        • 2010-09-14
        • 2021-08-25
        • 2013-10-22
        • 2022-09-28
        • 1970-01-01
        • 2022-01-15
        • 2022-06-29
        相关资源
        最近更新 更多