J'essaie d'extraire des e-mails à partir de pages web, voici ma fonction email grabber:InvalidSchema: Aucun adaptateur de connexion ont été trouvés python3.5.2
def emlgrb(x):
email_set = set()
for url in x:
try:
response = requests.get(url)
soup = bs.BeautifulSoup(response.text, "lxml")
emails = set(re.findall(r"[a-z0-9\.\-+_][email protected][a-z0-9\.\-+_]+\.[a-z]+", soup.text, re.I))
email_set.update(emails)
except (requests.exceptions.MissingSchema, requests.exceptions.ConnectionError):
continue
return email_set
Cette fonction doit être alimenté par une autre fonction, qui crée un liste d'URL. Fonction d'alimentation:
def handle_local_links(url, link):
if link.startswith("/"):
return "".join([url, link])
return link
def get_links(url):
try:
response = requests.get(url, timeout=5)
soup = bs.BeautifulSoup(response.text, "lxml")
body = soup.body
links = [link.get("href") for link in body.find_all("a")]
links = [handle_local_links(url, link) for link in links]
links = [str(link.encode("ascii")) for link in links]
return links
Elle continue avec de nombreuses exceptions, qui si elle est augmentée - renvoie une liste vide (non importante). retour Cependant la valeur de get_links() ressembler à ceci:
["b'https://pythonprogramming.net/parsememcparseface//'"]
Bien sûr, il y a beaucoup de liens dans la liste (ne peut pas l'afficher - réputation). fonction emlgrb() ne sont pas en mesure de traiter la liste (InvalidSchema: Aucun adaptateur de connexion ont été trouvés) Toutefois, si je supprimer manuellement guillemets b et redondants - donc la liste ressemble à ceci:
['https://pythonprogramming.net/parsememcparseface//']
emlgrb() fonctionne. Toute suggestion où est le problème ou de créer "fonction de nettoyage" pour obtenir la deuxième liste de la première - sont les bienvenus.
Merci
A quoi ressemble la sortie si vous supprimez .encode ('ascii')? –
En fait, fonctionne bien - merci. – scagbackbone
Je pense que dans str() vous pouvez aussi spécifier un encodage? Si vous en avez besoin;) –