Je travaille à extraire un tableau spécifique d'un couple de documents, qui détient les signatures des administrateurs, pour un couple de sociétés utilisant BeautifulSoup4. Mon programme trouve un en-tête au-dessus de la section qui contient les tables, puis compte deux tables à partir de cet endroit pour trouver la bonne table (Les documents étant des documents gouvernementaux signifie que le format est vrai dans presque tous les cas). À l'heure actuelle, voici comment je le fais:Belle grattage de table de soupe ne racle qu'une partie du temps
soup=BeautifulSoup(theDocument)
try:
tables = soup.find(text=re.compile("Pursuant to the requirements of Section 13")).findNext('table').findNext('table').strings
except AttributeError as e:
#deal with error, output failed URL to file
Avec ce code, je trouve les tables pour environ 70% de mes recherches, mais il suffit de jeter un peu l'erreur. Par exemple, this document est l'un de ceux qui ne trouve pas la table (vous pouvez trouver la section dans le document en faisant un CTRL + F pour la chaîne re.compile), mais this document de la même entreprise et ce qui ressemble à la même La mise en forme HTML donne des résultats positifs.
Des idées?
EDIT: le & nbsp peut être un problème, mais il y en a un autre aussi. Raccourcir la chaîne de recherche pour ne pas inclure le & nbsp entraîne toujours un échec.
EDIT2: Il semble qu'il y ait une erreur sous-jacente qui se produit parfois. J'ai essayé imprimer le code HTML de la variable de données et obtenu les éléments suivants:
<HTML><HEAD>
<TITLE>Access Denied</TITLE>
</HEAD><BODY>
<H1>Access Denied</H1>
You don't have permission to access "http://www.sec.gov/Archives/edgar/data/1800/000110465907013496/a07-1583_110k.htm" on this server.<P>
Reference #18.ee9a1645.1466687980.5cc0b4f
</BODY>
</HTML>
Toute façon de contourner ce problème, tout en retirant toujours le & nbsp?
EDIT 2: La réponse ci-dessous a résolu le problème que j'avais, donc je l'ai marqué comme réponse. Cela dit, il y avait un autre problème sous-jacent de newlines aléatoires dans la chaîne, donc j'ai modifié mon regex pour vérifier '\ s +' entre tous les mots au lieu de seulement des espaces. VEILLEZ A VERIFIER LE CODE HTML POUR CETTE ERREUR SI VOUS TROUVEZ UN PROBLEME COMME CELA.
Avez-vous essayez d'utiliser un analyseur différent? Par exemple: 'BeautifulSoup (theDocument, 'html.parser')' – Jkdc
@Jkdc D'après l'une des réponses, j'ai essayé d'utiliser lxml en tant qu'analyseur secondaire. Cela a causé plus d'erreurs que cela a résolu :) Cela étant dit, il PEUT travailler pour ramasser les cas que la première tentative n'attrape pas. – Retroflux
@Jkdc Le problème s'est développé si vous souhaitez vous faire une idée. – Retroflux