Как сказать Python искать элемент, только если он существует? - PullRequest
0 голосов
/ 19 апреля 2019

Я хочу получить информацию из продуктов супермаркета, но с учетом того, что некоторая информация (происхождение продукта) не всегда доступна.

Я пытаюсь перебрать блок данных ссылоксупермаркет.От каждого из них я хочу получить некоторую информацию.Однако происхождение продуктов не всегда доступно.Я не знаю, как заставить Python искать 'origin', только когда он доступен.Я пробовал следующий код:

import urllib.request
from bs4 import BeautifulSoup
import csv
import os

dir = ''
file = 'data.xlsx'
sheetname="Hoja1"
# create and write headers to a list 
rows = []
rows.append(['Brand', 'Product', 'Product_Number', 'Gross_Weight', 'Origin'])
# Change working directory: 
os.chdir(dir)
# Retrieve current working directory ('cwd'):
cwd = os.getcwd()
cwd

# Load spreadsheet:
xl = pd.ExcelFile(file)
# Load a sheet into a DataFrame by name: df1
df = xl.parse(sheetname)

for index, row in df.iterrows():
    # specify the url
    urlpage =  row['link']
    #print(urlpage)
    # query the website and return the html to the variable 'page'
    page = urllib.request.urlopen(urlpage)
    # parse the html using beautiful soup and store in variable 'soup'
    soup = BeautifulSoup(page, 'html.parser')
    # find results within table
    results = soup.find_all('dl', attrs={'class': 'des_info clearfix'})
    #print('Number of results', len(results))
    for result in results:
        # find all columns per result
        data = result.find_all('dd')
        # check that columns have data 
        if len(data) == 0: 
            continue

        # write columns to variables
        brand = data[0].getText()
        product = data[1].getText()
        number = data[2].getText()
        weight = data[3].getText()
        if data[4].getText() == None:
            origin = 0
        else:
            origin = data[4].getText()

        # write each result to rows
        rows.append([brand, product, number, weight, origin])

Я получаю следующую ошибку:

if data[4].getText() == None:
IndexError: list index out of range

Я хотел бы получить все данные, упорядоченные в списке, и, если источник нене доступно для одного предмета, ноль.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019

Вы также можете использовать len данных

if len(data) >= 4:
    #do something
else:
   #do something else
0 голосов
/ 19 апреля 2019

Вы можете использовать оператор try:

    # write columns to variables
    brand = data[0].getText()
    product = data[1].getText()
    number = data[2].getText()
    weight = data[3].getText()
    try:
        origin = data[4].getText()
    except:
        origin = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...