首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种(简单的)方法可以用Python计算网页中广告所占的百分比(物理)空间?

有没有一种(简单的)方法可以用Python计算网页中广告所占的百分比(物理)空间?
EN

Stack Overflow用户
提问于 2021-07-20 19:08:17
回答 1查看 73关注 0票数 1

问题陈述是这样的:找出网页上广告的实际占有率。

例如:假设我有一个URL,打开时有它的内容和3个广告-一个是图像广告,另外2个是‘图像和文本’广告。(我已经得到了许多这样的URL,广告数量不详)。我计算了基于bin类的广告数量,其中包含'ad‘或’赞助商‘,因此我知道它的页面上有3个广告。现在,我需要找出这些广告的占有率占整个网页的百分比,也就是说,所有三个广告加起来占据了页面的20%。我该怎么做呢?

我知道元素在不同的浏览器中不会呈现相同的效果,实际上我并不关心这一点。我只需要一个粗略的百分比基于Chrome (或Firefox -任何东西都可以)。

早在2013年,一个类似的问题就被问到了,How to programmatically measure the elements' sizes in HTML source code using python?只有2个解决方案,信息也不多。我发现建议的包Ghost (被提问者同意为有帮助的包)的应用程序接口非常难以理解。

我被要求使用没有广告的无头浏览器“呈现一个网站”,首先是广告,然后是广告,找出不同之处。问题是,我不知道该怎么做。我也希望在过去的8年里,有人能想出一个更简单的解决方案来解决这个问题。

由于我是第一次使用Python以这种方式进行“抓取”-如果它甚至可以被称为“抓取”-我可以使用您可能知道的任何资源/想法/文档。

EN

回答 1

Stack Overflow用户

发布于 2021-07-20 19:58:53

xpath来定位所有元素:

代码语言:javascript
复制
//*

然后我们可以计算广告,高度和宽度,因为它们是网页元素,我们可以使用相同的.size方法。

下面是演示

代码语言:javascript
复制
driver.maximize_window()
driver.implicitly_wait(30)
driver.get("https://stackoverflow.com/questions/68453828/is-there-a-simple-way-to-calculate-the-percentage-physical-space-occupied-by?noredirect=1#comment120979267_68453828")
wait = WebDriverWait(driver, 10)
width = []
height = []
for element in driver.find_elements(By.XPATH, "//*"):
    size = element.size
    w, h = size['width'], size['height']
    width.append(w)
    height.append(h)

total_width = sum(width)
total_height = sum(height)

print(total_width, total_height)

# Now calculate the width and heights of ads,

first_ad = wait.until(EC.visibility_of_element_located((By.XPATH, "//img")))
first_ad_size = first_ad.size
first_ad_w, first_ad_h = first_ad_size['width'], first_ad_size['height']

print(first_ad_w, first_ad_h)

total_page_area = total_width * total_height
print(total_page_area)

image_area = first_ad_w * first_ad_h
print(image_area)

percentage = (image_area * 100 )/total_page_area
print(percentage)

导入:

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

PS :我已经使用了first image as an ad (我知道这并不理想,但我只是想给OP一种实现这个特性的方法)

如果你能用一个通用的定位器(xpath,css)定位所有的广告,事情就会变得更容易。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68453828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档