Как я могу использовать gspread в Python3 для печати значения xpath в левой ячейке рядом с соответствующим URL? - PullRequest
1 голос
/ 31 марта 2019

Мое намерение состоит в том, чтобы вычистить значение xpath из диапазона URL-адресов, найденных в четвертом столбце Google Sheet, и распечатать это значение в ячейке слева от URL-адреса.

Пока у меня есть приведенное ниже, но когда я запускаю его, он печатает последнее значение списка adGroupStatus для всех URL-адресов, а не правильное значение для каждого соответствующего URL-адреса.

Может кто-нибудь предложить решение?

import requests
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from lxml import html

scope = ['https://spreadsheets.google.com/feeds',
         'https://www.googleapis.com/auth/drive']
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)

sh = client.open('example_sheet_name')
worksheet = sh.get_worksheet(0)

# the column (4th) with our URLs
url_list = worksheet.col_values(4)
# where we want our xpath values to print to
cell_list = worksheet.range('C1:C5')

def grab_xpathtext(urls, cell_range):
    # do the below for each url in the spreadsheet column 4:
    for url in urls:
        r = requests.get(url)
        tree = html.fromstring(r.content)
        adGroupStatus = tree.xpath('//*[@id="m_count"]/text()')
                # below prints each value to the cmd line on a new line as expected
        print(adGroupStatus[0])
    for cell in cell_range:
        # below prints the last value instead of each corresponding value
        cell.value = adGroupStatus[0]
    worksheet.update_cells(cell_range)

grab_xpathtext(url_list, cell_list)

Я ожидаю, что результат будет похож на это:

| расположение 1 | описание | 1 | URL 1 |

| расположение 2 | описание | 2 | url 2 |

| расположение 3 | описание | 3 | URL 3 |

| расположение 4 | описание | 4 | URL 4 |

| расположение 5 | описание | 5 | URL 5 |

... но вместо этого я получаю это:

| расположение 1 | описание | 5 | URL 1 |

| расположение 2 | описание | 5 | url 2 |

| расположение 3 | описание | 5 | URL 3 |

| расположение 4 | описание | 5 | URL 4 |

| расположение 5 | описание | 5 | URL 5 |

1 Ответ

0 голосов
/ 31 марта 2019

Я нашел ответ на этот вопрос в другом вопросе: Python / gspread - как мне обновить сразу несколько ячеек с РАЗНЫМИ ЗНАЧЕНИЯМИ?

Реализовано как:

url_list = worksheet.col_values(4)
cell_list = worksheet.range('C1:C5')

def grab_xpathtext(urls, cell_range):
        statuses = []
        for url in urls:
            r = requests.get(url)
            tree = html.fromstring(r.content)
            adGroupStatus = tree.xpath('//*[@id="m_count"]/text()')
            statuses.append(adGroupStatus[0])
        print(statuses)
        for cell in cell_range:
            for i, val in enumerate(statuses):
                cell_range[i].value = val
        worksheet.update_cells(cell_range)

grab_xpathtext(url_list, cell_list)
...