2016-06-16 18 views
0

私はリンクを解析してhtmlコンテンツを返す治療のCrawlspiderを持っています。しかし、javascriptのページでは、私はSeleniumが「隠された」コンテンツにアクセスするのを募集しました。問題は、あなたは、いくつかの変数の問題を持っているセレンはscrapy解析の外に動作している間、それはparse_items関数内セレンの内部の治療がうまくいきません

from scrapy.spiders import CrawlSpider, Rule, Spider 
from scrapy.selector import HtmlXPathSelector 
from scrapy.linkextractors import LinkExtractor 
from scrapy.linkextractors.sgml import SgmlLinkExtractor 
from craigslist_sample.items import CraigslistReviewItem 
import scrapy 
from selenium import selenium 
from selenium import webdriver 


class MySpider(CrawlSpider): 
    name = "spidername" 
    allowed_domains = ["XXXXX"] 
    start_urls = ['XXXXX'] 

    rules = (
     Rule(LinkExtractor(allow = ('reviews\?page')),callback= 'parse_item'), 
     Rule(LinkExtractor(allow=('.',),deny = ('reviews\?page',)),follow=True)) 

    def __init__(self): 
     #this page loads 
     CrawlSpider.__init__(self) 
     self.selenium = webdriver.Firefox() 
     self.selenium.get('XXXXX') 
     self.selenium.implicitly_wait(30) 


    def parse_item(self, response): 
     #this page doesnt 
     print response.url 
     self.driver.get(response.url) 
     self.driver.implicitly_wait(30) 

     #...do things 
+0

正確にはうまくいかないあなたが試したこと。 – Mobrockers

+0

注:あなたは 'selenium'を使っているようにスクリプトの変数名としてモジュール名を使用しないでください –

答えて

1

動作しないということです。 initメソッドでは、ブラウザインスタンスをself.seleniumに割り当ててから、メソッドをparse_itemにブラウザインスタンスとして使用しています。私はあなたのスクリプトを更新しました。今すぐやってみて下さい。

from scrapy.spiders import CrawlSpider, Rule, Spider 
from scrapy.selector import HtmlXPathSelector 
from scrapy.linkextractors import LinkExtractor 
from scrapy.linkextractors.sgml import SgmlLinkExtractor 
from craigslist_sample.items import CraigslistReviewItem 
import scrapy 
from selenium import selenium 
from selenium import webdriver 


class MySpider(CrawlSpider): 
    name = "spidername" 
    allowed_domains = ["XXXXX"] 
    start_urls = ['XXXXX'] 

    rules = (
     Rule(LinkExtractor(allow = ('reviews\?page')),callback= 'parse_item'), 
     Rule(LinkExtractor(allow=('.',),deny = ('reviews\?page',)),follow=True)) 

    def __init__(self): 
     #this page loads 
     CrawlSpider.__init__(self) 
     self.driver= webdriver.Firefox() 
     self.driver.get('XXXXX') 
     self.driver.implicitly_wait(30) 


    def parse_item(self, response): 
     #this page doesnt 
     print response.url 
     self.driver.get(response.url) 
     self.driver.implicitly_wait(30) 

     #...do things 
0

素晴らしい!ハッサンの答えと私が掻き集めていたURLのより良い知識の組み合わせは、答えにつながった(ウェブサイトにはロードされていない「偽のURL」が植えられていたことがわかる)

+0

ハッサンの答えを受け入れることで、彼に信用を与えることができます彼がした仕事のために。あなた自身の答えを投稿しないでください。 – JeffC

関連する問題