我发现类似的问题已经被问过了,但没有一个答案解释了我的情况。我还需要帮助实现我的代码的第二部分。
这里的代码:
import scrapy
import json
class MySpider(scrapy.Spider):
name = "myspider"
def start_requests(self):
urls = [
'https://www.lin1.com',
'https://www.link2.com'
]
for url in urls:
yield scrapy.Request(url= url, callback=self.parse_result, meta={'url':url})
def parse_result(self, response):
url = response.meta['url']
tag = response.xpath('//xxxxxxx/text()').get()
if tag is not None:
jsonData = json.loads(tag)
items_list = jsonData['x']['y']['z']
for index, item in enumerate(items_list):
self.parse_item(item, index + 1, url)
################ # IF I yield here I get some output #########################
# yield {
# 'url': url,
# 'index': index,
# 'title': item.get('name'),
# 'link': item.get('itemUrl'),
# 'item_id': item.get('itemId'),
# 'rating': item['rating'].get('averageRating'),
# 'price': item.get('price')
# }
# Request Next Page
next_page = response.css('li.next a::attr(href)').get
if next_page is not None:
yield response.follow(next_page, callback = self.parse_result , meta={'url':
url})
#yield scrapy.Request(url= url+next_page, callback = self.parse_result, meta=
{'url': url})
def parse_item(self, item_data, index, url):
############# This is not getting called ##############
yield {
'url': url,
'index': index,
'title': item_data.get('name'),
'link': item_data.get('itemUrl'),
'item_id': item_data.get('itemId'),
'rating': item_data['rating'].get('averageRating'),
'price': item_data.get('price')
}
1 -当我直接从parse_result函数中产生时,我至少会得到一些输出,但是当我使用parse_item函数时,什么都不显示2-另外,我如何在将其发送到前端之前将一个(url)中的所有项目放入列表中?谢谢你的帮助。
1条答案
按热度按时间2o7dmzc51#
parse_item
方法不产生任何输出的原因是因为parse_result方法没有产生输出。要解决这个问题,您可以轻松地在parse_result
方法中的方法调用前面添加yield语句。我还将parse_items
中的yield改为return,因为您只返回一个字典。您也可以通过访问
response.url
属性来获取当前请求的url,除非您被重定向,在这种情况下,您可以使用response.request.url
属性。例如: