2017-07-01 12 views
1

エラーの原因を理解してください。 ページに移動... /?start = 0、/?start = 25、/?start = 50 最後のページ(50)からのみデータを収集します。 マイコード:Scrapy:すべてのページからデータを収集しない

from scrapy import FormRequest 
from scrapy import Request 
import scrapy 
from scrapy.spiders import CrawlSpider 

from ..items import GetDomainsItem 


def pages_range(start, step): 
    stop = 50 
    r = start 
    while r <= stop: 
     yield r 
     r += step 

class GetUrlDelDomSpider(CrawlSpider): 
    name = 'get_domains' 

    allowed_domains = ["member.expireddomains.net"] 

    paginate = pages_range(0, 25) 

    start_urls = list(map(lambda i: 'https://member.expireddomains.net/domains/expiredcom201612/?start=%s' % i, paginate)) 
    def start_requests(self): 
     for start_url in self.start_urls: 
      yield Request(start_url, dont_filter=True) 

    def parse(self, response): 
     yield FormRequest.from_response(response, 
             formnumber=1, 
             formdata={'login': 'xxx', 'password': '*****', 'rememberme': '1'}, 
             callback=self.parse_login, 
             dont_filter=True) 
    def parse_login(self, response): 
     if b'The supplied login information are unknown.' not in response.body: 
      item = GetDomainsItem() 
      for each in response.selector.css('table.base1 tbody '): 
       item['domain'] = each.xpath('tr/td[@class="field_domain"]/a/text()').extract() 
       return item 

ありがとうございました。

答えて

2

return itemあなたparse_login方法は、ループを壊す中:

for each in response.selector.css('table.base1 tbody '): 
    item['domain'] = each.xpath('tr/td[@class="field_domain"]/a/text()').extract() 
    return item 
    ^

ですから、あなたのループの各反復で項目と歩留まりそれを作成する必要があります。

for each in response.selector.css('table.base1 tbody '): 
    item = GetDomainsItem() 
    item['domain'] = each.xpath('tr/td[@class="field_domain"]/a/text()').extract() 
    yield item 
関連する問題