我正在尝试检索此网站的广告网址: 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()
答案 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编写的,但页面源不会改变。