2017-07-25 3 views
0

Je voudrais que les commandes suivantes saisissent la date de l'adresse dans cette plage, mais je n'arrive pas à la faire fonctionner plus d'une fois. J'utilise Python 3. Comme vous pouvez le voir ci-dessous, l'url du site est ajoutée avec i pour être lu http://zinc.docking.org/substance/10; http://zinc.docking.org/substance/11 ... et ainsi de suite. Voici le code:Python Embedded Pour les boucles de plage

import bs4 as bs 
import urllib.request 
site = "http://zinc.docking.org/substance/" 
for i in range(10, 16): 
    site1 = str("%s%i" % (site, i)) 
    sauce = urllib.request.urlopen(site1).read() 
    soup = bs.BeautifulSoup(sauce, 'lxml') 
    table1 = soup.find("table", attrs={"class": "substance-properties"}) 
for row in table1.findAll('tr'): 
    row1 = row.findAll('td') 
ate = row1[0].getText() 
print(ate) 

Ceci est ma sortie:

$python3 Date.py 
November 11th, 2005 

Le script doit cependant me donner 3 dates. Ce code fonctionne donc je sais que la ligne [0] contient en fait une valeur. J'ai l'impression qu'il y a une sorte d'erreur de formatage simple mais je ne sais pas par où commencer le dépannage. Quand je formater ce « correctement » c'est le code:

import bs4 as bs 
import urllib.request 
import pandas as pd 
import csv 
site = "http://zinc.docking.org/substance/" 
for i in range(10, 16): 
    site1 = str("%s%i" % (site, i)) 
    sauce = urllib.request.urlopen(site1).read() 
    soup = bs.BeautifulSoup(sauce, 'lxml') 
    table1 = soup.find("table", attrs={"class": "substance-properties"}) 
    table2 = soup.find("table", attrs={"class": "protomers"}) 
    for row in table1.findAll('tr'): 
     row1 = row.findAll('td') 
     ate = row1[0].getText() 
     print(ate) 

L'erreur que je reçois est la suivante:

Traceback (most recent call last): 
File "Stack.py", line 11, in <module> 
ate = row1[1].getText() 
IndexError: list index out of range 

Le premier code fonctionne si je sais que la ligne [0] ne contiennent en fait une valeur. Des idées?

Répondre

1

Vous pouvez fixer votre empreinte:

import bs4 as bs 
import urllib.request 
site = "http://zinc.docking.org/substance/" 
for i in range(10, 16): 
    site1 = str("%s%i" % (site, i)) 
    sauce = urllib.request.urlopen(site1).read() 
    soup = bs.BeautifulSoup(sauce, 'lxml') 
    table1 = soup.find("table", attrs={"class": "substance-properties"}) 
    for row in table1.findAll('tr'): 
     row1 = row.findAll('td') 
     Date = row1[0].getText() 
     print(Date) 

Edit: Vous devez renommer votre variable Date, qui est un nom réservé. De plus, par convention, les vars Python sont en minuscules.

+0

Patrick, je vous remercie d'avoir répondu mais quand je corrige le code et je suis arrivé comme une erreur retraçage (le plus récent appel dernier): Fichier « Reset.py », ligne 14, à date = row1 [0 ] .getText() IndexError: index de liste hors plage – jcruzer

+0

Vérifiez le 'len' de' row1' ou 'print' il - il peut être vide. – patrick

+0

S'il vous plaît poster le code ci-dessus, je ne peux pas le lire de cette façon – patrick