2017-02-24 10 views
0

append()関数を使ってリストを返すか、返すのですが、いくつかのエラーが出ます。Scrapy:append()関数を使ってリストを返す方法

解決方法はありますか?私はいくつかのエラーをコメントしました。

申し訳ありませんが、私はpythonコーディングに新しいです。

class mySpider(CrawlSpider): 
    name = "testspider" 
    allowed_domains = ["example.com"] 
    start_urls = (
     'http://www.example.com/test-page.html', 
    ) 

    rules = (
     Rule(LinkExtractor(allow=('')), callback="parse_items", follow=True), 
    ) 

    def parse_items(self, response): 
     item = myItem() 

     #Extract some items 
     item['status'] = response.status 
     yield item 

     inlinks = [] 
     links = LinkExtractor(canonicalize=False, unique=True).extract_links(response) 
     for link in links: 
      is_allowed = False 
      for allowed_domain in self.allowed_domains: 
       if allowed_domain in link.url: 
        is_allowed = True 
      if is_allowed: 
       inlink = anotherItem() 
       inlink['url_from'] = response.url 
       inlink['url_to'] = link.url 
       inlinks.append(inlink) 
     yield inlinks #ERROR: Spider must return Request, BaseItem, dict or None, got 'list' in <GET http://www.example.com/test-page.html> 
     #if using yield inlink of course I get just the first element, in my case I get only the first URL for every unique page 
     #using return inlinks I get 

答えて

-1

yield一度に1つの項目。リストを作成して、それを最後に返す必要はありません。

for link in links: 
     is_allowed = False 
     for allowed_domain in self.allowed_domains: 
      if allowed_domain in link.url: 
       is_allowed = True 
     if is_allowed: 
      inlink = anotherItem() 
      inlink['url_from'] = response.url 
      inlink['url_to'] = link.url 
      yield inlink 
-1

エラーメッセージは、スパイダーがRequestBaseItemdictまたはNoneを返さなければならないことは明らかです。

しかし、あなたはあなただけ一度に1つのアイテムを得、すべてのエラーを防ぐために、このコードを使用することができます

for link in links: 
     is_allowed = False 
     for allowed_domain in self.allowed_domains: 
      if allowed_domain in link.url: 
       is_allowed = True 
     if is_allowed: 
      inlink = anotherItem() 
      inlink['url_from'] = response.url 
      inlink['url_to'] = link.url 
      yield inlink 

list(PHPでそのと呼ばれる配列を)戻ってきています。

か、戻る/一度にすべてのアイテムを得、この

for link in links: 
     is_allowed = False 
     for allowed_domain in self.allowed_domains: 
      if allowed_domain in link.url: 
       is_allowed = True 
     if is_allowed: 
      inlink = anotherItem() 
      inlink['url_from'] = response.url 
      inlink['url_to'] = link.url 
      inlinks.append(inlink) 
    yield {'all_links': inlinks} 
をしたい場合でも、
関連する問題