我正在尝试抓取由一些用户输入驱动的网站。例如,用户给我一个产品的 pid 和一个名称,一个单独的程序将启动蜘蛛,收集数据,并将其返回给用户。
但是,我想要的唯一信息是产品和人员,它们位于指向 xml 的两个链接中。如果我知道这两个链接和模式,我如何构建回调来解析不同的项目?
例如,如果我定义了这两个项目:
class PersonItem(Item):
name = Field()
...
class ProductItem(Item):
pid = Field()
...
我知道他们的链接有模式:
www.example.com/person/*<name_of_person>*/person.xml
www.example.com/*<product_pid>*/product.xml
然后我的蜘蛛看起来像这样:
class MySpider(BaseSpider):
name = "myspider"
# simulated given by user
pid = "4545-fw"
person = "bob"
allowed_domains = ["http://www.example.com"]
start_urls = ['http://www.example.com/person/%s/person.xml'%person, 'http://www.example.com/%s/product.xml'%pid]
def parse(self, response):
# Not sure here if scrapping person or item
我知道我也可以使用定义规则Rule(SgmlLinkExtractor())
,然后为人和产品各自提供自己的解析回调。但是,我不确定它们如何在这里应用,因为我认为规则是为了更深入地爬行,而我只需要刮擦表面。