【问题标题】:retrieving ad urls using scrapy and selenium使用 scrapy 和 selenium 检索广告网址
【发布时间】:2015-03-13 05:12:47
【问题描述】:

我正在尝试检索此网站的广告 URL: http://www.appledaily.com

广告网址是使用 javascript 加载的,因此标准爬虫无法工作。刷新页面时,广告也会发生变化。

我发现了这个问题here,我收集到的是我们需要首先使用 selenium 在浏览器中加载页面,然后使用 Scrapy 检索 url。我有一些使用scrapy的经验,但在使用Selenium方面完全没有。任何人都可以向我展示/指向我如何编写脚本来做到这一点的资源吗?

非常感谢!

编辑:

我尝试了以下方法,但都无法打开广告横幅。任何人都可以帮忙吗?

from selenium import webdriver driver=webdriver.Firefox()
driver=webdriver.Firefox()
driver.get('http://appledaily.com')

adBannerElement = driver.find_element_by_id('adHeaderTop') 
adBannerElement.click()

第二次尝试:

adBannerElement =driver.find_element_by_css_selector("div[@id='adHeaderTop']")
adBannerElement.click()

【问题讨论】:

标签: selenium scrapy


【解决方案1】:

CSS 选择器不应包含 @ 符号,它应该是 'div[id='adHeaderTop']' 或更短的表示方式,与 div#adHeaderTop 相同

实际上在观察和分析站点和您尝试执行的事件时,我发现 noscript 标签是您应该感兴趣的。只需获取此节点的 HTML 源代码,解析 href 属性并触发此 URL。 相当于点击横幅。

  <noscript>
   "<a href="http://adclick.g.doubleclick.net/aclk%253Fsa%...</a>"
  </noscript>

(这不是完整的节点信息,只需在 Chrome 中查看横幅即可找到此标签)。

编辑:这是一个工作 sn-p,它可以在不点击广告横幅的情况下为您提供 URL,如标记中所述。

    driver = new FirefoxDriver();
    driver.navigate().to("http://www.appledaily.com");

    WebElement objHidden = driver.findElement(By.cssSelector("div#adHeaderTop_ad_container noscript"));
    if(objHidden != null){
        String innerHTML = objHidden.getAttribute("innerHTML");
        String adURL = innerHTML.split("\"")[1];
        System.out.println("** " + adURL); ///URL when you click on the Ad
    }
    else{
        System.out.println("<noscript> element not found...");
    }

虽然这是用 Java 编写的,但页面源不会改变。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 1970-01-01
相关资源
最近更新 更多