【发布时间】:2017-10-19 03:48:20
【问题描述】:
我对 Python 和 Scrapy 非常陌生,但是当我尝试迭代嵌套的 html 元素时,它并没有产生预期的结果。
以下是 HTML,我正在尝试废弃。
<div class="level1" role="main">
<div class="level2">
<h1 id="fullStoreHeading" class="class_h1">Page Title</h1>
<div class="fsdColumn_3">
<div class='fsdDeptBox'>
<img alt="" src="" aria-hidden="true" height="100%" width="100%">
<h2 class="fsdDeptTitle">TV</h2>
<div class='fsdDeptCol'>
<a class="class_a" href="/test?_encoding=UTF8&id=1001">Samsung</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1002">Vizio</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1003">Element</a>
</div>
</div>
<div class='fsdDeptBox'>
<img alt="" src="" aria-hidden="true" height="100%" width="100%">
<h2 class="fsdDeptTitle">Laptop</h2>
<div class='fsdDeptCol'>
<a class="class_a" href="/test?_encoding=UTF8&id=1004">Apple</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1005">Microsoft</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1006">Dell</a>
</div>
</div>
</div>
<div class="fsdColumn_3">
<div class='fsdDeptBox'>
<img alt="" src="" aria-hidden="true" height="100%" width="100%">
<h2 class="fsdDeptTitle">Video Game Console</h2>
<div class='fsdDeptCol'>
<a class="class_a" href="/test?_encoding=UTF8&id=1007">Xbox One</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1008">Xbox 360</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1009">PS 5</a>
</div>
</div>
<div class='fsdDeptBox'>
<img alt="" src="" aria-hidden="true" height="100%" width="100%">
<h2 class="fsdDeptTitle">SSD</h2>
<div class='fsdDeptCol'>
<a class="class_a" href="/test?_encoding=UTF8&id=1010">Samsung Evo</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1011">Crucial</a>
<a class="class_a" href="/test?_encoding=UTF8&id=1012">Sandisk</a>
</div>
</div>
</div>
</div>
我试图从上面的 html 生成的输出是一个列表:
产品类别 -> 品牌 -> Id
例如
电视
Samsung 1001
Vizio 1002
Element 1003
笔记本电脑
Apple 1004
Microsoft 1005
Dell 1006
视频游戏机
Xbox Onen 1007
Xbox 360 1008
PS4 1009
ProductCategories.py
def parse(self, response):
l = ItemLoader(item=ProductSpiderItem(), response=response)
titles = response.xpath('//*[@class="fsdDeptTitle"]')
for title in titles:
Product_Category= title.xpath('text()').extract()
l.add_value('Product_Category', Product_Category)
for brnd in
title.xpath('//*[@class="fsdDeptCol"]/a[@class="class_a"]'):
Brand = brnd.xpath('text()').extract()
l.add_value('Brand', Brand)
return l.load_item()
此时它正在打印“Outer For Loop”中的所有产品类别一次,“Inner For Loop”正在打印所有品牌,而与产品类别无关,并且“Inner For Loop”在任何时候打印所有品牌“外部 For 循环”运行。
非常感谢任何帮助解决问题。
非常感谢。
【问题讨论】: