IndexError: список индексов вне диапазона при использовании aws - PullRequest
0 голосов
/ 12 февраля 2019

Когда я запускал этот код на Jupyter и Virtual Machine, он работал гладко.Но когда я начал работать в AWS, он всегда показывает индекс списка вне диапазона .Я хотел бы знать, как решить эту проблему.Спасибо!

Код:

from datetime import datetime, timedelta
from time import strptime
import requests
from lxml import html
import re
import time
import os
import sys

from pandas import DataFrame
import numpy as np
import pandas as pd

import sqlalchemy as sa
from sqlalchemy import create_engine
from sqlalchemy.sql import text as sa_text
import pymysql


date_list=[]
for i in range(0,2):
    duration=datetime.today() - timedelta(days=i)
    forma=duration.strftime("%m-%d")
    date_list.append(forma)

print(date_list)



def curl_topic_url_hot():
    url = 'https://www.xxxx.com/topiclist.php?f=397&p=1'
    headers = {'User-Agent': 'aaaaaaaaaaaaaaa'}
    response = requests.get(url, headers=headers)
    tree = html.fromstring(response.text)
    output = tree.xpath("//div[@class='pagination']/a[7]")
    maxPage = int(output[0].text)
    print('There are', maxPage, 'pages.')

    return [maxPage]

topic_url_hot = curl_topic_url_hot()

Журнал AWS:

['02-12', '02-11']
Traceback (most recent call last):
  File "/home/hadoop/ellen_crawl/test0211_mobile.py", line 167, in <module>
    topic_url_hot = curl_topic_url_hot()
  File "/home/hadoop/ellen_crawl/test0211_mobile.py", line 48, in curl_topic_url_hot
    maxPage = int(output[0].text)
IndexError: list index out of range

Когда я запускаю этот код на Jupyter, он показывает:

['02-12', '02-11']
There are 818 pages.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

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

if len(output) > 1:
    maxPage = int(output[0].text)

или

try:
    maxPage = int(output[0].text)
except IndexError:
    # do sth. with the error message

В любом случае ваш исходный код не даст того результата, который, как вы думаете, будет.

0 голосов
/ 12 февраля 2019

Вы можете избавиться от ошибки, протестировав сначала и только проиндексировав свой результат, или попытавшись / исключив перехват ошибки:

if len(output)>0: 
    maxPage = int(output[0].text)

try:
    maxPage = int(output[0].text)
except IndexError as e:
    pass # log it or do smth with it

Ваш реальная проблема лежит в другом месте:

Ваш керлинг не дает того, что вы думаете - возможно, AWS не поддерживает то, что вы хотите сделать, и, следовательно, запрос заблокирован и ничего не возвращает?Может быть, у вас есть опечатка в вашем URL?

Некоторые идеи:

  • проверить содержимое tree
  • проверить ваши журналы AWS.
  • проверьте response на наличие его кода ошибки
  • попробуйте URL-адрес вручную (вы сделали это, это больше для других, которые найдут это позже)
0 голосов
/ 12 февраля 2019

Ваш AWS посещает этот веб-сайт, и он возвращает ошибку html, проверьте его.https://www.xxxx.com/topiclist.php?f=397&p=1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...