5

私はScrapyを初めて使用し、Pythonも初めてです。論文のタイトル、リンク、記事の説明をWebページからのRSSフィードのようにほとんど抽出するスクレーパーを作成して、論文を作成しようとしています。次のスクレーパーを作成しました。実行して.txtとしてエクスポートすると、空白になります。アイテムローダーを追加する必要があると思いますが、前向きではありません。

Items.py

from scrapy.item import Item, Field

class NorthAfricaItem(Item):
    title = Field()
    link = Field()
    desc = Field()
    pass

クモ

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from northafricatutorial.items import NorthAfricaItem

class NorthAfricaItem(BaseSpider):
   name = "northafrica"
   allowed_domains = ["http://www.north-africa.com/"]
   start_urls = [
       "http://www.north-africa.com/naj_news/news_na/index.1.html",
   ]

 def parse(self, response):
 hxs = HtmlXPathSelector(response)
 sites = hxs.select('//ul/li')
 items = []
 for site in sites:
     item = NorthAfricaItem()
     item['title'] = site.select('a/text()').extract()
     item['link'] = site.select('a/@href').extract()
     item['desc'] = site.select('text()').extract()
     items.append(item)
 return items

アップデート

助けてくれたTalvalinに感謝し、さらにいくつかの混乱で問題を解決することができました。オンラインで見つけたストックスクリプトを使用していました。しかし、シェルを利用すると、必要なものを取得するための正しいタグを見つけることができました。私は結局:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from northafrica.items import NorthAfricaItem

class NorthAfricaSpider(BaseSpider):
   name = "northafrica"
   allowed_domains = ["http://www.north-africa.com/"]
   start_urls = [
       "http://www.north-africa.com/naj_news/news_na/index.1.html",
   ]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//ul/li')
       items = []
       for site in sites:
           item = NorthAfricaItem()
           item['title'] = site.select('//div[@class="short_holder"]    /h2/a/text()').extract()
       item['link'] = site.select('//div[@class="short_holder"]/h2/a/@href').extract()
       item['desc'] = site.select('//span[@class="summary"]/text()').extract()
       items.append(item)
   return items

誰かがここで何かを見たら、私は間違ったことを知らせてください......しかしそれは機能します。

4

1 に答える 1

1

このコードについて注意すべきことは、エラーが発生して実行されることです。コマンドラインからスパイダーを実行してみると、次の行に沿って何かが表示されます。

        exceptions.TypeError: 'NorthAfricaItem' object does not support item assignment

2013-01-24 16:43:35+0000 [northafrica] INFO: Closing spider (finished)

このエラーが発生する理由は、スパイダーとアイテムクラスに同じ名前を付けたためです:NorthAfricaItem

スパイダーコードで、NorthAfricaItemのインスタンスを作成して(タイトル、リンク、説明など)を割り当てる場合、スパイダーバージョンがアイテムバージョンよりも優先されます。NorthAfricaItemのスパイダーバージョンは実際にはアイテムのタイプではないため、アイテムの割り当ては失敗します。

この問題を修正するには、スパイダークラスの名前をNorthAfricaSpiderなどに変更すると、問題が解決するはずです。

于 2013-01-24T16:55:36.927 に答える