2016-05-03 4 views
4

データ用のWebサイトをクロールしようとしています.18歳以上のページにアクセスすると、警告ページが表示されます。私のクローラは通常、ほとんどのredditページで動作し、データを正常に取得できます。私はセレンを使って次のページに移動しようとしましたが、ブラウザを開くとクローラは成功しますが、クローラはそのページに従いません。以下は私のコード..Python scrap reddit確認ボタンがクロールを中断する

class DarknetmarketsSpider(scrapy.Spider): 
    name = "darknetmarkets" 
    allowed_domains = ["https://www.reddit.com"] 
    start_urls = (
     'http://www.reddit.com/r/darknetmarkets', 
    ) 
    rules = (Rule(LinkExtractor(allow=()), callback='parse_obj', follow=False),) 
    def __init__(self): 
     self.driver = webdriver.Firefox() 

    def parse(self, response): 
     self.driver.get('http://www.reddit.com/r/darknetmarkets') 
     #self.driver.get('https://www.reddit.com/over18?dest=https%3A%2F%2Fwww.reddit.com%2Fr%2Fdarknetmarketsnoobs') 

     while True: 
      try: 
       YES_BUTTON = '//button[@value="yes"]' 
       next = self.driver.find_element_by_xpath(YES_BUTTON).click() 


       url = 'http://www.reddit.com/r/darknetmarkets' 

       next.click() 
      except: 
       break 

     self.driver.close() 


     item = darknetItem() 
     item['url'] = [] 
     for link in LinkExtractor(allow=(), deny=self.allowed_domains).extract_links(response): 
      item['url'].append(link.url) 
      print link 

ボタンのCSS ..私はあなたがそのsubredditに年齢制限画面を迂回しようとしていることがわかり

<button class="c-btn c-btn-primary" type="submit" name="over18" value="yes">continue</button> 
+0

のRedditが持っている[API](https://www.reddit.com/の

コード礼儀をscrapyするためにそれらを送信した後

dev/api)。 – jordanm

+1

私はたいていはプローを使用していますが、スクラッピーを好むのです。 – Anekdotin

+0

セレンとセラピーは、特にあなたが別の人にセックスしない限り、お互いに通信しません。セレンがすべてのウェブサイトをクロールすると、すべてのデータが失われます。 –

答えて

2

です。 「続ける」ボタンをクリックすると、その選択肢はクッキーとして保存され、スクリーピーに戻る必要があります。 Cookieを保存するセレンでそれをクリックして、scrapy authentication login with cookies

class MySpider(scrapy.Spider): 
name = 'MySpider' 
start_urls = ['http://reddit.com/'] 

def get_cookies(self): 
    self.driver = webdriver.Firefox() 
    base_url = "http://www.reddit.com/r/darknetmarkets/" 
    self.driver.get(base_url) 
    self.driver.find_element_by_xpath("//button[@value='yes']").click() 
    cookies = self.driver.get_cookies() 
    self.driver.close() 
    return cookies 

def parse(self, response): 
    yield scrapy.Request("http://www.reddit.com/r/darknetmarkets/", 
     cookies=self.get_cookies(), 
     callback=self.darkNetPage) 
関連する問題