3
votes

IndexError: liste l'index hors de portée lors de l'utilisation de aws

Lorsque j'ai exécuté ce code sur Jupyter et Virtual Machine, il s'est bien déroulé. Mais lorsque j'ai commencé à fonctionner sur AWS, il affiche toujours index de liste hors plage . J'aimerais savoir comment résoudre ce problème. Merci!

Code:

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

Journal 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

Lorsque j'ai exécuté ce code sur Jupyter, cela montre :

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()


1 commentaires

@PatrickArtner quand j'essaye d'imprimer l'arbre, il montre


3 Réponses :


-1
votes

Votre AWS visite ce site Web et il renvoie une erreur html, vérifiez-le. https://www.xxxx.com/topiclist.php?f=397&p= 1


5 commentaires

pensez-vous vraiment que www.xxxx.com est la vraie URL utilisée ici?


Bien sûr que non, vous pouvez votre journal aws et imprimer le résultat html.


Lara n'a donné qu'un exemple d'url. pas l'URL réelle @ DivideBy0


L'OP a masqué l'URL qu'elle utilise - l'URL masquée ne conduit pas à une cible valide, elle génère donc une erreur. Votre réponse basée sur cette erreur n'a pas de sens.


Ce que je veux dire, c'est vérifier le résultat HTML, pas l'URL



3
votes

Vous pouvez soit utiliser

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

Ou

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

Dans les deux cas, votre code d'origine ne produit pas le résultat que vous pensez qu'il produit .


0 commentaires

3
votes

Vous pouvez vous débarrasser de l'erreur en testant d'abord et uniquement l'indexation dans votre résultat ou en essayant / sauf en détectant l'erreur:

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

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

Votre vrai problème est ailleurs:

Votre curling ne produit pas ce que vous pensez qu'il fait - peut-être qu'AWS ne prend pas en charge ce que vous voulez faire et donc la demande est bloqué et ne renvoie rien? Peut-être avez-vous une faute de frappe dans votre URL?

Quelques idées:

  • inspecter le contenu de tree
  • inspectez vos journaux aws.
  • inspectez la réponse pour son code d'erreur
  • essayez l'URL manuellement (vous l'avez fait, c'est plus pour les autres qui la trouveront plus tard)


2 commentaires

Il n'imprime rien si j'essaye sauf que je devrais probablement l'essayer avec beautifulsoup!


@Lara jetez un œil à stackoverflow.com/a/14896505/7505395 - cela pourrait vous aider à accéder au contenu souhaité (pas une réponse à cette question cependant: o)