Список добавления одного объекта в l oop. Как мне исправить эту ошибку? - PullRequest
0 голосов
/ 17 января 2020

Я немного новичок в этом. Идея состоит в том, чтобы очистить данные. У меня проблема с какой-то частью моего кода. Код работает отлично, но во время выполнения команды «print (« Output is: », output)», как показано в приведенном ниже коде. Я ожидаю список объектов. В результате я получаю только один объект в списке. Например, я ожидаю, что после выполнения кода вывод должен быть [resp, resp, ...], он показывает только последний объект, который будет выполнен в l oop как: [resp]. Пример моего вывода:

The output is: [{'Company Name': ' ELEVEN', 'Department': '7', 'Ad Posted To': 'MATUN SIGNNATURE', 'Publication References': 'AGOSTI, annonce n°1125\n\t\t\t\t\t\t\t'}]

Что-то пропущено в моем коде? Спасибо.

В приведенном ниже коде я пропустил некоторую информацию в URL и заголовке. Надеюсь, приведенного ниже кода должно быть достаточно, чтобы объяснить ситуацию.

    import requests
    from lxml import html
    import csv


    data = []
    for i in range(1, 51, 1):
        print('page: %s' % i)
        headers = {
             //header info
    }
    response = requests.get(url)
    _txt = response.text
    data.append(_txt)
    print(len(data))
    # print(data)
# parsing the html

for text in data:
    doc = html.fromstring(text)
    container = doc.xpath("//tr[contains(@class, 'pair')]")[1]
    company_name = container.xpath('.//dt[contains(text(), "Dénomination sociale :")]/following-sibling::dd[1]/text()')
    # publication_date = container.xpath(".//td[@class='colonnel']/text()")
    #ad_category = container.xpath('.//dt[contains(text(), "Catégorie d'annonce :")]/following-sibling::dd[1]/text()')
    department = container.xpath('.//dt[contains(text(), "Département :")]/following-sibling::dd[1]/text()')
    ad_posted_to = container.xpath('.//dt[contains(text(), "Annonce déposée au :")]/following-sibling::dd[1]/text()')
    publication_references = container.xpath('.//dt[contains(text(), "Références de publication :")]/following-sibling::dd[1]/text()')
    # json output
    resp = {}
    output = []
    for info in zip(company_name, department, ad_posted_to, publication_references):
        resp['Company Name'] = info[0]
        resp['Department'] = info[1]
        resp['Ad Posted To'] = info[2]
        resp['Publication References'] = info[3]
        print(resp)
output.append(resp)
print("The output is:",output)

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Проблема в том, что вы перезаписываете output при каждой итерации. Попробуйте поставить output = [] за пределами l oop for text in data.

Например:

output = []
for text in data:
    doc = html.fromstring(text)
    container = doc.xpath("//tr[contains(@class, 'pair')]")[1]
    company_name = container.xpath('.//dt[contains(text(), "Dénomination sociale :")]/following-sibling::dd[1]/text()')
    # publication_date = container.xpath(".//td[@class='colonnel']/text()")
    #ad_category = container.xpath('.//dt[contains(text(), "Catégorie d'annonce :")]/following-sibling::dd[1]/text()')
    department = container.xpath('.//dt[contains(text(), "Département :")]/following-sibling::dd[1]/text()')
    ad_posted_to = container.xpath('.//dt[contains(text(), "Annonce déposée au :")]/following-sibling::dd[1]/text()')
    publication_references = container.xpath('.//dt[contains(text(), "Références de publication :")]/following-sibling::dd[1]/text()')
    # json output
    resp = {}
    for info in zip(company_name, department, ad_posted_to, publication_references):
        resp['Company Name'] = info[0]
        resp['Department'] = info[1]
        resp['Ad Posted To'] = info[2]
        resp['Publication References'] = info[3]
        print(resp)
    output.append(resp)
print("The output is:",output)
1 голос
/ 17 января 2020

Вы берете только последний. Попробуйте добавить resp для вывода внутри for l oop и перезапустите resp dict

for info in zip(company_name, department, ad_posted_to, publication_references):
    resp = {}
    resp['Company Name'] = info[0]
    resp['Department'] = info[1]
    resp['Ad Posted To'] = info[2]
    resp['Publication References'] = info[3]
    print(resp)
    output.append(resp)
...