Так что я застрял на этом пару дней. Я анализирую объект JSON, который содержит некоторую информацию. В этом объекте есть список, содержащий n номеров контактов. У каждого из них есть идентификатор, который можно использовать для создания URL. В этом URL есть номер телефона для этого контакта.
Итак, я хочу начать создавать элемент, добавить некоторую информацию, затем l oop через контакты, и для каждого l oop я хочу добавить к этому исходному элементу номер телефона, найденный в URL. .
Моя проблема: как вернуть набранный номер телефона и добавить его в элемент? Если я заканчиваю основной метод синтаксического анализа с помощью «yield items», к элементу не добавляются никакие данные, собранные в l oop. Но если я вместо этого заканчиваю parseContact с помощью "yield items", весь элемент дублируется для каждого l oop.
Пожалуйста, помогите, у меня скоро произойдет сбой: D
Вот код:
def parse(self, response):
items = projectItem()
rData = response.xpath('//*[@id="data"]/text()').get()
dData = json.loads(rData)
listOfContacts = dData["contacts"]
Data = dData["customer"]
items['customername'] = Data["companyName"]
items['vatnumber'] = Data["vatNo"]
items['contacts'] = []
i=0
for p in listOfContacts:
id = json.dumps(p["key"])
pid = id.replace("\"","")
urlP = urljoin("https://example.com/?contactid=", pid)
items['contacts'].append({"pid":pid,"name":p["name"]})
yield scrapy.Request(urlP, callback=self.parseContact,dont_filter=True,cb_kwargs={'items':items},meta={"counter":i})
i +=1
#IF I YIELD HERE, NONE OF THE DATA IN THE LOOP GETS SAVED
yield items
def parseContact(self, response,items):
i = response.meta['counter']
data = response.xpath('//*[@id="contactData"]/script/text()').get()
items['contacts'][i].update({"data":data})
#IF I YIELD HERE THE ITEM iS DUPLICATED N TIMES
yield items