【发布时间】:2015-03-19 21:20:45
【问题描述】:
我正在为嵌套页面抓取而苦苦挣扎。
我只获得与第一个爬网页面项目数一样多的项目。
网站结构会是这样的。
- 抓取品牌 - 品牌链接
- 使用品牌链接去抓取模型和模型链接
- 使用模型链接抓取特定公告及其属性。
假设品牌 A 有 2 个模型,第一个模型有 11 个公告,第二个模型有 9 个。品牌 B 有 3 个模型,每个模型有 5 个公告。
在上面的示例中,我需要将每个公告作为单独的项目(总共 35 个)获取,但我需要将项目编号作为品牌,例如品牌 A 和第一个公告,然后是品牌 B 和第一个公告。
class SiteSpider(CrawlSpider):
log.start(logfile="log.txt", loglevel="DEBUG", logstdout=None)
name = "site"
#download_delay = 2
allowed_domains = ['site.com']
start_urls = ['http://www.site.com/search.php?c=1111']
items = {}
def parse(self, response):
sel = Selector(response)
#requests =[]
brands = sel.xpath("//li[@class='class_11']")
for brand in brands:
item = SiteItem()
url = brand.xpath('a/@href')[0].extract()
item['marka'] = brand.xpath("a/text()")[0].extract()
item['marka_link'] = brand.xpath('a/@href')[0].extract()
request = Request("http://www.site.com"+url,callback=self.parse_model, meta={'item':item})
# requests.append(request)
#
yield request
def parse_model(self, response):
sel = Selector(response)
models = sel.xpath("//li[@class='class_12']")
for model in models:
item = SiteUtem(response.meta["item"])
url2 = model.xpath('a/@href')[0].extract()
item ['model'] = model.xpath("a/text()")[0].extract()
item ['model_link'] = url2
return item
你能帮这个菜鸟用伪代码来实现吗?我猜我在基础级别犯了一个错误。
【问题讨论】:
-
嗨,保罗,感谢您的关注。到目前为止,我添加了我尝试实现的代码。因为我是 python 和 scrapy 的新手,所以我正在一步一步地做。在第一个解析函数中,我试图获取品牌和品牌的链接。我能够做到这一点并获得完整的品牌列表。但诀窍在于它创造的商品数量与品牌数量一样。我正在尝试实现的算法似乎存在问题。