我是Scrapy的新手,也是蟒蛇.我正在尝试编写一个刮刀,它将提取文章标题,链接和文章描述几乎像网页的RSS提要,以帮助我完成我的论文.我编写了下面的刮刀,当我运行它并将其导出为.txt时,它会变回空白.我相信我需要添加一个Item Loader,但我并不积极.
Items.py
from scrapy.item import Item, Field
class NorthAfricaItem(Item):
title = Field()
link = Field()
desc = Field()
pass
Run Code Online (Sandbox Code Playgroud)
蜘蛛
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
Run Code Online (Sandbox Code Playgroud)
UPDATE
感谢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
Run Code Online (Sandbox Code Playgroud)
如果有人在这里看到任何东西我做错了让我知道......但它确实有效.
关于这段代码需要注意的是它运行时会出错。尝试通过命令行运行蜘蛛,您将看到类似以下内容的内容:
exceptions.TypeError: 'NorthAfricaItem' object does not support item assignment
2013-01-24 16:43:35+0000 [northafrica] INFO: Closing spider (finished)
Run Code Online (Sandbox Code Playgroud)
发生此错误的原因是因为您为蜘蛛和项目类指定了相同的名称:NorthAfricaItem
在您的蜘蛛代码中,当您创建 NorthAfricaItem 的实例来分配内容(如标题、链接和描述)时,蜘蛛版本优先于项目版本。由于 NorthAfricaItem 的蜘蛛版本实际上不是 Item 的类型,因此 item 分配失败。
要解决此问题,请将您的蜘蛛类重命名为 NorthAfricaSpider 之类的名称,问题就应该得到解决。
| 归档时间: |
|
| 查看次数: |
5708 次 |
| 最近记录: |