网站不允许右键单击,网络抓取不显示正文标签之间的文本

Posted

技术标签:

【中文标题】网站不允许右键单击,网络抓取不显示正文标签之间的文本【英文标题】:Website doesn't allow right click and web scrape does not show text between body tags 【发布时间】:2020-01-31 05:38:36 【问题描述】:

我正在尝试网页抓取网页。但是,网站本身不允许右键单击功能来检查元素或页面源。另外,当我打印解析后的html文本时,结果只有body标签,不显示body标签内的信息。

from selenium import webdriver
import bs4 as bs
import urllib.request

driver = webdriver.Chrome(executable_path=r'PATH')
driver.get("website.com")

assert "Title" in driver.title

sauce = urllib.request.urlopen('website.com').read()

soup = bs.BeautifulSoup(sauce, 'html.parser')
print(soup)

我希望从汤中得到实际的 HTML(特别是 body 标签之间的 HTML);但是,我只得到 ​​p>

<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
<title>Title</title>

</head>
<body></body>
</html>

我对网页抓取比较陌生;但是,我以前从未遇到过这个问题。它是特定于网站的吗?当我使用 chrome 扩展时,我可以允许右键单击,只有这样,我才能检查页面源(并且在 body 标签中有 HTML 和标签)。

【问题讨论】:

这个问题听起来非常特定于站点,因为我以前从未遇到过类似的事情。看起来您也正确地通过 BeautifulSoup 获取页面 HTML,并且它正在返回一些内容,因此您的命令肯定正确执行。我对您的唯一建议是尝试F12 打开页面源而不是右键单击。您能否提供您尝试访问的站点 URL?如果它是公开的,我们也许可以看看。 F12 允许检查;但是,有没有办法检索 HTML 正文标记信息? 检查是否显示了 内部的任何信息,或者它也是空的?我确实发布了一个使用 Selenium 获取页面源的小解决方案。我们可以比较一下,看看它是否与您通过 BeautifulSoup 获得的相同或不同。 menu.dartmouth.edu 网页的 HTML 没有任何正文内容(网页上的CTRL+U 可以在浏览器中查看源代码)。检查工具会在内容被 javascript 加载后显示。在您的代码示例中,urllib 检索到的 HTML 将没有正文内容。因为他们有一个 AJAX API,所以只需使用它(F12 -> Network 选项卡)。您可以检索"get_webmenu_list" 的菜单、"get_webmenu_meals_list" 的膳食、"get_recipes_for_menumealdate" 的食谱等。 【参考方案1】:

您可以尝试仅使用 Python / Selenium 获取正文标记信息,并查看页面来源是否与您在问题中发布的内容有任何不同。这将有助于缩小问题范围。

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("website.com")

html = driver.page_source

print(html)

如果这产生的结果与您在问题中发布的 HTML 相同,那么问题可能出在网站本身而不是您的代码上。

【讨论】:

显示更多的页面源;但是,它并没有显示全部。 在body标签中显示一些div标签;但是,它并没有显示所有这些。 driver.page_source 应该是整个页面源。是不是所有的标签都在结尾处关闭了,或者看起来文本可能已经被截断了? 我相信 page_source 有一个问题,它只对页面加载后有效,因此其他动态加载的数据不会随之出现。我认为这个网站正在做一些需要特殊技术的偷偷摸摸/棘手的事情。【参考方案2】:

这可能无法回答问题,但它应该会恢复您的上下文菜单:

driver.execute_script("""
  window.addEventListener('contextmenu', e => 
    e.stopPropagation();
    e.stopImmediatePropagation();
  , true)
""")

【讨论】:

以上是关于网站不允许右键单击,网络抓取不显示正文标签之间的文本的主要内容,如果未能解决你的问题,请参考以下文章

如何从隐藏的跨度类 HTML 中抓取链接?

从 LinkedIn 网络抓取公司详细信息 --- 无法在内部获取正文标签

win7无线网络列表显示不出来

Ipad iOS 滚动不一致:禁用正文滚动但允许在某些元素上滚动

html5

为啥网站下载的vpn文件苹果手机打不开