-1

私は最初のPythonプロジェクトに取り組んでおり、Scrapy.orgフレームワークを使用しています。IFステートメントを使用して、価格が空であるかどうかを判断しようとしているため、CSVファイルに保存されません。

何らかの理由で、インデント例外が発生します。

IndentationError:インデントされたブロックが必要です

IFステートメントは、このコードスニペットの最後にあります。

時間を割いて私を助けてくれてありがとう!

コード:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from craigslist_sample.items import CraigslistSampleItem

class MySpider(BaseSpider):
name = "craig"
allowed_domains = ["craigslist.org"]
start_urls = [
'http://longisland.craigslist.org/search/sss?sort=date&query=raptor+660&srchType=T',
'http://newyork.craigslist.org/search/sss?zoomToPosting=&query=raptor+660&srchType=T&minAsk=&maxAsk=&sort=date',
'http://hudsonvalley.craigslist.org/search/sss?zoomToPosting=&query=raptor+660&srchType=T&minAsk=&maxAsk=&sort=date',
'http://newjersey.craigslist.org/search/sss?zoomToPosting=&query=raptor+660&srchType=T&minAsk=&maxAsk=&sort=date',
'http://hartford.craigslist.org/search/sss?zoomToPosting=&query=raptor+660&srchType=T&minAsk=&maxAsk=&sort=date'
]

def parse(self, response):
    hxs = HtmlXPathSelector(response)
    titles = hxs.select("//p")
    items = []
    for titles in titles:
        item = CraigslistSampleItem()
        #item["date"] = titles.select('span[@class="itemdate"]/text()').extract()
        item ["title"] = titles.select("a/text()").extract()
        item ["link"] = titles.select("a/@href").extract()
        item ["price"] = titles.select('span[@class="itempnr"]/span[@class="itempp"]/text()').extract()
        if not items ["price"]:
            #do nothing
        else:
            items.append(item)
    return items
4

3 に答える 3

3

ここに問題があります:

    if not items ["price"]:
        #do nothing
    else:
        items.append(item)

...インデントされたステートメントが期待される場所にコメントだけを含めることはできません。Pythonには、まさにこの場合のためのキーワードがあります- pass

    if not items ["price"]:
        #do nothing
        pass
    else:
        items.append(item)
于 2013-03-17T17:26:17.363 に答える
3

if、、、elseなどの後にコードブロックを続ける必要がforありdefますコメントはカウントされません。これがpassステートメントの目的です。

if not item["price"]:
    pass
else:
    items.append(item)

とはいえ、条件を逆にしてみませんか?

if item["price"]:
    items.append(item)
于 2013-03-17T17:26:45.427 に答える
2

ifが何もせず、elseのみを使用している場合は、おそらくその否定を使用する必要があります。テストしているだけの場合は、それに追加する必要がありますpass

if True:
  pass  # just a comment here does not work
else:
  dostuff()
于 2013-03-17T17:26:22.700 に答える