我對Python和Scrapy相當陌生,並且遇到了如何在Scrapy的幫助下創建嵌套JSON的問題。在Scrapy中嵌套項目數據
從XP中選擇我想要的元素在XPath Helper和一些Google的幫助下沒有問題。但我不太清楚我應該如何獲得我想要的JSON結構。
的JSON結構,我希望會是這樣的:
{"menu": {
"Monday": {
"alt1": "Item 1",
"alt2": "Item 2",
"alt3": "Item 3"
},
"Tuesday": {
"alt1": "Item 1",
"alt2": "Item 2",
"alt3": "Item 3"
}
}}
的HTML看起來像:
<ul>
<li class="title"><h2>Monday</h2></li>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
<ul>
<li class="title"><h2>Tuesday</h2></li>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
我發現https://stackoverflow.com/a/25096896/6856987,我卻無法適應這個適合我的需要。我非常感謝在正確的方向上推動我如何實現這一目標。
編輯:隨着由Padraic提供的微調,我設法讓我更接近我想要完成的一步。我提出了以下幾點,這比我之前的情況略有改善。 JSON仍然不是我想要的地方。
Scrapy蜘蛛:
import scrapy
from dmoz.items import DmozItem
class DmozSpider(scrapy.Spider):
name = "dmoz"
start_urls = ['http://urlto.com']
def parse(self, response):
uls = response.xpath('//ul[position() >= 1 and position() < 6]')
item = DmozItem()
item['menu'] = {}
item['menu'] = {"restaurant": "name"}
for ul in uls:
item['menu']['restaurant']['dayOfWeek'] = ul.xpath("li/h2/text()").extract()
item['menu']['restaurant']['menuItem'] = ul.xpath("li/text()").extract()
yield item
生成的JSON:
[
{
"menu":{
"dayOfWeek":[
"Monday"
],
"menuItem":[
"Item 1",
"Item 2",
"Item 3"
]
}
},
{
"menu":{
"dayOfWeek":[
"Tuesday"
],
"menuItem":[
"Item 1",
"Item 2",
"Item 3"
]
}
}
]
可以肯定的感覺就像我在做一千零件一個事情不對的,希望有人更聰明比我可以點我是正確的方式。
我可以看到'dmoz.items.DmozItem'嗎? – Sam