我正在尝试抓取网站上的广告...
例如这个网站
我正在尝试从这个广告中获取广告
/html/body[@class='single single-post postid-171 single-format-standard custom-background hasGoogleVoiceExt']/div[@id='site']/div[@id='site-out ']/div[@id='site-fixed']/div[@id='content-out']/div[@id='content-in']/div[@id='main-content-wrap ']/div[@id='main-content-contain']/div[@id='content-wrap']/div[@class='sec-marg-out4 relative']/div[@class=' sec-marg-in4']/article[@class='post-171 post type-post status-publish format-standard hentry category-uncategorized']/div[@id='post-area']/div[@class ='post-body-out']/div[@class='post-body-in']/div[@id='content-area']/div[@class='content-area-cont left relative' ]/div[@class='sec-marg-out relative']/div[@class='sec-marg-in']/div[@class='content-area-out']/div[@class= 'content-area-in']/div[@class='content-main 左相对']/div[@id='article-ad']/div[1]/div[@id='ac_110238']/div[@class='ac_adbox']/div[@class='ac_adbox_inner']
'ac_container' 或 'ac-adbox'
当我在浏览器中访问该页面时,我看到了广告,当我使用 scrapy 获取 html 时
这是一个脚本
<div id="contentad110238"></div>
<script type="text/javascript">
(function(d) {
var params =
{
id: "d12cd6f3-b896-443b-9140-07e35e66e222",
d: "YmVzdHlsaW5nLmNvbQ==",
wid: "110238",
cb: (new Date()).getTime()
};
var qs=[];
for(var key in params) qs.push(key+'='+encodeURIComponent(params[key]));
var s = d.createElement('script');s.type='text/javascript';s.async=true;
var p = 'https:' == document.location.protocol ? 'https' : 'http';
s.src = p + "://api.content.ad/Scripts/widget2.aspx?" + qs.join('&');
d.getElementById("contentad110238").appendChild(s);
})(document);
</script> </div>
我该如何抓取这个?任何帮助将不胜感激……我猜我必须在 python 或 scrapy 中使用 js 渲染器……有什么建议吗?
最佳答案
这些广告是通过 Javascript 获取的,因此当您下载原始 HTML(就像 Scrapy 那样)时,您将看不到它们。
不过,你可以看看Splash (以前的 ScrapyJS)与 Scrapy integration使用 Javascript 无缝嵌入浏览器。直接来自 Scrapy 开发者。
一切都在 Python 中,除了用于浏览器渲染的 Qt。
关于javascript - 如何使用 python/scrapy 抓取网站上小部件的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34945137/