2
votes

Erreur python AttributeError: l'objet 'NoneType' n'a pas d'attribut 'text'

Je suis nouveau en python, j'ai codé ci-dessous:

Traceback (most recent call last):
  File "scratch_1.py", line 19, in <module>
    print('\033[32m' + req + ' - Title: ', soup.find('title').text)
AttributeError: 'NoneType' object has no attribute 'text'

J'essaye d'imprimer les titres des liens depuis IPs.txt

Résultat: https://gyazo.com/fadb8f3427ecdeebb252779bd253a15c

J'ai une erreur: p>

import warnings
import requests
from colorama import init
init(autoreset=True)

from requests.packages.urllib3.exceptions import InsecureRequestWarning
warnings.simplefilter("ignore", UserWarning)
warnings.simplefilter('ignore', InsecureRequestWarning)

from bs4 import BeautifulSoup as BS


with open('ips.txt','r') as urls:
    for url in urls.readlines():
        req = url.strip()
        try:
            page=requests.get(req, verify=False, allow_redirects=False, stream=True, timeout=10)
            soup = BS(page.text)

            print('\033[32m' + req + ' - Title: ', soup.find('title').text)
        except requests.RequestException as e:
            print('[!] Timeout!')

comment résoudre ce problème?

merci salutations.


0 commentaires

3 Réponses :


-2
votes

Ok donc j'ai trouvé le problème, quand vous mettez .text vous avez oublié les parenthèses donc ça devrait être .text()


1 commentaires

Il ne peut pas être appelé, il me recevra une erreur: Traceback (dernier appel le plus récent): Fichier "scratch_1.py", ligne 20, dans print ('\ 033 [32m' + req + '- Titre: ', soup.find (' title '). text ()) TypeError: l'objet' str 'n'est pas appelable



0
votes

Si la soupe n'a pas la balise alors soup.find ('title') renvoie None . Vous devez vérifier la valeur de retour avant d'essayer de l'utiliser:

title_tag = soup.find('title')
if title_tag:
    # Do something with title_tag.title
    # For example, extract the title as string title_tag.title.string
else: 
    # No title, do something else


2 commentaires

il imprime XXX comment se débarrasser de cela et le faire imprimer juste le "XXX". sans <> Bla


C'est une question différente, mais j'ai ajouté un exemple.



0
votes

Dans votre segment try..except , un moyen simple (à mon avis) serait d'utiliser:

    try:
        page=requests.get(req, verify=False, allow_redirects=False, stream=True, timeout=10)
        soup = BS(page.text)
        print('\033[32m' + req + ' - Title: ', soup.find('title').text)
    except AttributeError:
        # do something...

Faites-moi savoir si je manque quelque chose ici (jamais utilisé BS4).


0 commentaires