使用scrapy和selenium检索广告网址

时间:2015-03-13 05:12:47

标签: selenium scrapy

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

使用javascript加载广告网址,因此标准的crawlspider无效。刷新页面时,广告也会发生变化。

我发现了这个问题here,我收集的是我们需要首先使用selenium在浏览器中加载页面,然后使用Scrapy检索网址。我有一些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()

1 个答案:

答案 0 :(得分:1)

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

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

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

(这不是完整的节点信息,只需检查Chrome中的横幅,您就会找到此标记。)

编辑:这是一个工作代码,它为您提供了网址,而没有点击标记中提到的广告横幅。

    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编写的,但页面源不会改变。