Паук для справки:Как Scrapy сделку с Javascript
import scrapy
from scrapy.spiders import Spider
from scrapy.selector import Selector
from script.items import ScriptItem
class RunSpider(scrapy.Spider):
name = "run"
allowed_domains = ["stopitrightnow.com"]
start_urls = (
'http://www.stopitrightnow.com/',
)
def parse(self, response):
for widget in response.xpath('//div[@class="shopthepost-widget"]'):
#print widget.extract()
item = ScriptItem()
item['url'] = widget.xpath('.//a/@href').extract()
url = item['url']
#print url
yield item
Когда я запускаю этот вывод в терминале следующим образом:
2015-08-21 14:23:51 [scrapy] DEBUG: Scraped from <200 http://www.stopitrightnow.com/>
{'url': []}
<div class="shopthepost-widget" data-widget-id="708473">
<script type="text/javascript">!function(d,s,id){var e, p = /^http:/.test(d.location) ? 'http' : 'https';if(!d.getElementById(id)) {e = d.createElement(s);e.id = id;e.src = p + '://' + 'widgets.rewardstyle.com' + '/js/shopthepost.js';d.body.appendChild(e);}if(typeof window.__stp === 'object') if(d.readyState === 'complete') {window.__stp.init();}}(document, 'script', 'shopthepost-script');</script><br>
Это HTML:
<div class="shopthepost-widget" data-widget-id="708473" data-widget-uid="1"><div id="stp-55d44feabd0eb" class="stp-outer stp-no-controls">
<a class="stp-control stp-left stp-hidden"><</a>
<div class="stp-inner" style="width: auto">
<div class="stp-slide" style="left: -0%">
<a href="http://rstyle.me/iA-n/zzhv34c_" target="_blank" rel="nofollow" class="stp-product " data-index="0" style="margin: 0 0px 0 0px">
<span class="stp-help"></span>
<img src="//images.rewardstyle.com/img?v=2.13&p=n_24878713">
</a>
<a href="http://rstyle.me/iA-n/zzhvw4c_" target="_blank" rel="nofollow" class="stp-product " data-index="1" style="margin: 0 0px 0 0px">
<span class="stp-help"></span>
<img src="//images.rewardstyle.com/img?v=2.13&p=n_24878708">
Мне кажется, что он поражает блок при попытке активировать Javascript. Я знаю, что javascript не может работать в режиме scrapy, но должен быть способ добраться до этих ссылок. Я посмотрел на селен, но не могу понять.
Любая помощь приветствуется.
Это фантастика, однако она просто вешает консоль в течение многих лет: 2015-08-21 16:36:14 [scrapy] INFO: Просканировано 0 страниц (на 0 страницах/мин), соскоблило 0 предметов (на 0 пунктов/мин) 2015-08-21 16:37:00 [scrapy] DEBUG: повторил попытку (не удалось 3 раза): время соединения по протоколу TCP out: 60: Время работы отключено. 2015-08-21 16:37:00 [scrapy] ОШИБКА: Ошибка при загрузке : время соединения по протоколу TCP: 60: время ожидания работы. –
@ Wine.Merchant, вы запустили контейнер докер-брызг? Благодарю. – alecxe
Я открыл докер и положил нужную строку $ docker run -p 8050: 8050 scrapinghub/splash, а затем это событие 2015-08-21 15: 22: 19.651375 [-] Запуск фабрики –