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()
3 Réponses :
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
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
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 .
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:
tree
réponse
pour son code d'erreur 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)
@PatrickArtner quand j'essaye d'imprimer l'arbre, il montre