2013-06-14 2 views
0

J'ai un script Python qui utilise BS4 pour récupérer le code HTML d'une page Web. Ensuite, je trouve un champ d'en-tête spécifique dans le code HTML pour extraire le texte. Je fais ceci avec ce qui suit:Erreur Python NoneType

r = br.open("http://example.com") 
html = r.read() 
r.close() 
soup = BeautifulSoup(html) 
# Get the contents of the html tag (h1) that displays results 
searchResult = soup.find("h1").contents[0] 
# Get only the number, remove all text 
if not(searchResult == None): 
    searchResultNum = int(re.match(r'\d+', searchResult).group()) 
else: 
    searchResultNum = 696969 

Le code HTML réel ne change pas. Il semble toujours comme ça:

<div id="resultsCount"> 
    <h1 class="f12">606 Results matched</h1> 
</div> 

Le problème est, mon script fonctionne très bien pour peut-être 4 minutes (varie) et les accidents avec:

Traceback (most recent call last): 
    File "C:\Users\Me\Documents\Aptana Studio 3 Workspace\PythonScripts\PythonScripts\setupscript.py", line 109, in <module> 
    searchResultNum = int(re.match(r'\d+', searchResult).group()) 
AttributeError: 'NoneType' object has no attribute 'group' 

Je pensais que je menais cette erreur. Je suppose que je ne comprends tout simplement pas. Pouvez-vous aider?

Merci.

Répondre

1

Si searchResult ne commence pas par un nombre re.match(r'\d+', searchResult) sera None et None n'a pas d'attribut de groupe. Aussi if not(searchResult == None): est un peu mal, utilisez if searchResult:

searchResultNum = 696969 
if searchResult: 
    m = re.match(r'\d+', searchResult) 
    if m: 
     searchResultNum = int(m.group()) 
+0

... la conséquence étant qu'il devrait probablement utiliser 're.search()' au lieu de 're.match()' ... –

+0

à moins qu'il ne veut chiffres au début, son exemple de texte '606 résultats appariés 'implique qu'il le fait. – cmd

Questions connexes