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).