저는 Python과 Scrapy에 새로 도입되었지만 중첩 된 html 요소를 반복 할 때 원하는 결과를 얻지 못했습니다.Scrapy : 중첩 된 항목을 반복하지만 원하는 출력을 생성하려고하지 않습니다.
아래 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에서 생성하기 위해 노력하고 출력은 목록입니다 : -> 브랜드 -
제품 카테고리> 이드
일예
TV
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"는 " Outer For Loop "가 실행됩니다.
문제를 해결하는 데 도움을 주시면 감사하겠습니다.
고마워요.
미안, 내가 깜빡 이 게시물을 쓰는 동안 *를 쓰십시오. 나는 그 지위를 편집했다. 당신의 제안에 따라, 나는 * [@ class = "fsdDeptCol"]/a [@ class = "class_a"] '... 그러나 브랜드에 대한 레코드를 반환하지 않습니다. – Raj
나는이 질문에 더 잘 대답하기 위해 나의 대답을 편집했다.내 컴퓨터에 파일로 주어진 HTML을 저장하고 scrapy shell로 열었다. 나는 원하는 출력을 얻을 수있었습니다. – SuperStickman22
예. 이제 작동 중입니다. 많이 감상 할 수 있습니다! – Raj