Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- """
- Ein kleines Beispiel, wie man Links mit den Modulen
- requests und beautifulsoup herunterladen kann und
- danach direkt parsen. Das Parsen erfolgt durch
- BeautifulSoup (bs4).
- Der Generator get_links löst aus dem Objekt
- die Links heraus und gibt dann linktext und
- link aus.
- Wie man im Header sehen kann, geschrieben für
- Python 3.x
- Abhängigkeiten: requests, beautifulsoup4
- linux: pip3 install requests beautifulsoup4
- windows: py -m pip install requests
- ###########
- # Hinweis #
- ###########
- Bitte beachten, dass es Gesetze gibt.
- ###########
- Copyright: ?? macht damit was ihr wollt.
- """
- import time
- import requests
- import bs4
- import urllib
- def get_links(bs, pattern):
- """
- Sucht nach dem Tag a und gibt alle Links aus,
- die im Linktext das Suchmuster enthalten
- bs := BeautifulSoup object
- pattern:= str
- returns := linktext, link
- """
- a_tag = bs.find_all('a')
- for link in a_tag:
- if pattern in link.text:
- yield (link.text.strip(), link.get('href'))
- def bs4_create(link):
- """
- Lädt eine Seite herunter und erstellt und gibt ein
- BeautifulSoup Objekt zurück.
- """
- page = requests.get(link).text
- bs = bs4.BeautifulSoup(page, 'html.parser')
- return bs
- def get_email_adresses(url):
- """
- Soll die E-Mail Adressen ausgeben.
- Funktioniert natuerlich nur auf den Gelben Seiten
- Woanders muesste es angepasst werden.
- """
- req = requests.get(url)
- if req.status_code == 200:
- bs = bs4.BeautifulSoup(req.text, 'html.parser')
- else:
- return set()
- ret = set()
- for element in bs.find_all('a'):
- if element.get('class'):
- if 'email_native_app' in element['class']:
- link = element.get('href')
- email, query = urllib.parse.splitquery(urllib.parse.unquote(link[7:]))
- ret.add(email)
- return ret
- def gelbeseiten(url='http://www.gelbeseiten.de/auto/hagen,,,,,umkreis-50000'):
- """
- Zusammengehackte Funktion. Die URL muss
- eine Seite mit Suchtreffer auf gelbeseiten.de sein.
- Uebergibt man der Funktion nichts, wird
- die Beispielsuchanfrage fuer Autohaeuser in Hagen
- im umkreis von 50 km durchgeführt.
- Ausgegeben wird ein Set mit E-Mail Adressen.
- Es findet keine Validierung statt.
- """
- emails = get_email_adresses(url)
- i=2
- while True:
- new_emails = get_email_adresses(url + '/s{}'.format(i))
- if new_emails:
- emails.update(new_emails)
- i += 1
- else:
- break
- return emails
- def help():
- print('{} "url" "suchmuster"'.format(sys.argv[0]))
- # Quasi der Einspringepunkt, wenn das Programm ausgeführt wird.
- if __name__ == '__main__':
- import sys
- if len(sys.argv) == 3:
- url = sys.argv[1]
- suchmuster = sys.argv[2]
- page = bs4_create(url)
- elif len(sys.argv) == 1:
- help()
- # nur ein Beispiel, nicht uebertreiben.
- url = 'http://www.gelbeseiten.de/branchenbuch/autohaus/hessen'
- page = bs4_create(url)
- suchmuster = 'Autohaus'
- print(' '.join([sys.argv[0], url, suchmuster]))
- time.sleep(2)
- else:
- help()
- # Falsche Anzahl der Argumente
- sys.exit(1)
- ### Hier könnte man auch eine Funktion erstellen
- for text, link in get_links(page, suchmuster):
- print('#', text, '->', link)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement