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.
3 Réponses :
Ok donc j'ai trouvé le problème, quand vous mettez .text
vous avez oublié les parenthèses donc ça devrait être .text()
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
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
il imprime
C'est une question différente, mais j'ai ajouté un exemple.
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).