我对开发非常陌生,对scrapy非常陌生,迄今为止我已经获得了文档,但是我碰到了一堵似乎无法通过的墙。下面是我拥有的基本蜘蛛(为了保护无辜,更改了网址)。使用scrapy收集和存储数据
开始网址包含产品类别列表,这些产品类别列表链接到包含链接到我想要解析的产品页面的子类别列表的页面。
我的蜘蛛目前运行没有错误,似乎取得我想要的所有页面,但不想拨打parse_product()
。下面的代码:
# coding=utf-8
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import HtmlXPathSelector
from scrapy.item import Item, Field
class MySpider(CrawlSpider):
name = "MySpider"
allowed_domains = ["www.mysite.com"]
start_urls = ["http://www.mysite.com/start_page/",]
rules = (
Rule(SgmlLinkExtractor(restrict_xpaths='//body[@class="item"] '), # Product page
callback='parse_product'),
Rule(SgmlLinkExtractor(restrict_xpaths="//ul[@id='products_ul']/li"), # First 2 pages - same xpath to follow.
)
)
def parse_product(self, response):
print " parsing product" # Print statement added for testing purposes - test failed.
hxs = HtmlXPathSelector(response)
item = MySpiderItem()
item['name'] = hxs.select('/xpath/to/name')
item['description'] = hxs.select('/xpath/to/description')
item['image'] = hxs.select('/xpath/to/image')
print item # Print statement added for testing purposes - test failed.
return item
class MySpiderItem(Item):
name = Field()
description = Field()
image = Field()
问题:
1)如果这个做我想做的事情?
好的,很明显,不,不,这就是为什么我在这里!但我不确定是否这是坏xpaths,或者如果我错误地调用parse_product
,例如:我是否需要该产品页面的链接提取器?我没有跟随从那里的链接,但如何我将它们作为目标来解析没有它?)
理论上,它应该只能获得2种类型的页面,猫/子网页与链接列表("//ul[@id='products_ul']/li")
是其次和需要的产品页面被解析(仅适用于这些洽标识符<body class="mainpage version2 **item**">
VS <body class="mainpage version2 **category**">
)
2)如何保存输出到一个CSV(或与此有关的任何其他简单的文本格式)?
这个文档让我感到困惑,(虽然我确信这是由于我缺乏理解而不是穷人的文档,因为总体上它非常出色),它似乎将您发送给您,并给出示例不用说应该写入哪个文件。
我目前正在使用这个蜘蛛作为一个独立的文件与$ scrapy runspider filename.py
为了便于测试,但我很乐意将它设置为一个完整的scrapy蜘蛛,如果这使得事情更容易。
你可以在这里找到一个很好的例子:https://gist.github。com/dreamcc/10566630 – davidcondrey