3

これは私のコードです

def parse(self, response):
    soup = BeautifulSoup(response.body)
    hxs = HtmlXPathSelector(response)
    sites = hxs.select('//div[@class="row"]')
    items = []

    for site in sites[:5]:
        item = TestItem()
        item['username'] = "test5"
        request =  Request("http://www.example.org/profile.php",  callback = self.parseUserProfile)
        request.meta['item'] = item
        **yield item**

    mylinks= soup.find_all("a", text="Next")
    if mylinks:
        nextlink = mylinks[0].get('href')
        yield Request(urljoin(response.url, nextlink), callback=self.parse)

def parseUserProfile(self, response):
    item = response.meta['item']
    item['image_urls'] = "test3"
    return item

今、私の上記は機能しますが、それで私は価値を得ていませんitem['image_urls'] = "test3"

nullとして来ています

return request代わりに使用する場合 yield item

次に、エラーが発生しますcannot use return with generator

この行を削除すると

yield Request(urljoin(response.url, nextlink), callback=self.parse) その後、私のコードは正常に動作し、取得できますimage_urlsが、リンクをたどることはできません

item_urls を取得するために使用できる方法はありますreturn requestyield together

4

2 に答える 2

2

あなたの問題はよくわかりませんが、あなたのコードに 1 つの問題があります。

def parseUserProfile(self, response):
    item = response.meta['item']
    item['image_urls'] = "test3"
    return item

解析コールバックの戻り値はシーケンスである必要があるためreturn [item]、コールバックを実行するか、ジェネレーターに変換する必要があります。

def parseUserProfile(self, response):
    item = response.meta['item']
    item['image_urls'] = "test3"
    yield item
于 2012-12-17T12:41:42.953 に答える
1

機械的なエラーが発生しているようです。それ以外の:

for site in sites[:5]:
    item = TestItem()
    item['username'] = "test5"
    request =  Request("http://www.example.org/profile.php",  callback = self.parseUserProfile)
    request.meta['item'] = item
    **yield item**

必要なもの:

for site in sites[:5]:
    item = TestItem()
    item['username'] = "test5"
    request =  Request("http://www.example.org/profile.php",  callback = self.parseUserProfile)
    request.meta['item'] = item
    yield request
于 2012-12-17T13:52:15.210 に答える