这是我的代码
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"
它将变为空
现在使用return request
代替yield item
然后得到cannot use return with generator
如果我删除此行
yield Request(urljoin(response.url, nextlink), callback=self.parse)
然后我的代码工作正常,我可以得到image_urls
,但后来我按照链接
那么有什么方法可以使用return request
和yield together
以便我获得item_urls
答案 0 :(得分: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
答案 1 :(得分: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