Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs

Ich bin im Corporate Planning Office eines IT-Unternehmens beschäftigt. Vor kurzem habe ich darüber nachgedacht, den Job zu wechseln, und ich studiere Programmieren, um diese Leute anzusprechen. Nur zu sagen, dass Sie mündlich lernen, macht keinen großen Reiz. Deshalb habe ich mit Python und Django eine einfache Webanwendung erstellt, sie auf AWS erstellt und die Quelle auf Github veröffentlicht.

Dieses Mal möchte ich das Programm (Python) erklären, das ich selbst geschrieben habe und das auch als Ausgabe dient, um Wissen in mir zu fixieren. Es ist drei Monate her, seit ich Python studiert habe, und es ist mein erstes Mal, dass ich so etwas von Grund auf neu mache. Wenn Sie Ratschläge zur Verbesserung des Codes haben, würde ich mich freuen, wenn Sie einen Kommentar abgeben könnten.

Dieses fertige Produkt

Erstellt eine Webanwendung, die wie zwei Mundpropaganda-Websites des Unternehmens aussieht + Auflisten und Anzeigen von aufgelisteten Unternehmensinformationen, mit der Hoffnung, dass sie beim Vergleich von Jobs den Vergleich von Unternehmen erleichtert. Ich habe am Ende nicht viel benutzt ... orz img80.jpg

Überblick

Die Benutzeroberfläche wird mit Bootstrap schnell und ohne großen Aufwand erstellt Framework verwendet Django Server auf Amazon Linux unter AWS

UI Sprache Rahmen Server
Bootstrap4 Python Django AWS(Amazon Linux + Nginx)

Programmdetails

Programmablauf

・ Geben Sie im Suchfenster den Firmennamen ein, nach dem Sie suchen möchten ・ Erhalten Sie Informationen (HTML), die Suchunternehmen enthalten, vom Scraping von Zielseiten -Extrahieren Sie nur die erforderlichen Informationen aus den erfassten Informationen (HTML) (analysieren) -Benötigte Information Mundpropaganda für Unternehmen Informationen wie die Anzahl der Mitarbeiter (für börsennotierte Unternehmen) ・ Als Suchergebnisse anzeigen

__ Informationen (HTML) mit Suchfirmen von der Zielwebsite abrufen __

Verwenden Sie Schöne Suppe, um Informationen (Schaben) über die Zielstelle zu erhalten

searchCompany.py



#Fügen Sie hier eine analysierte Site hinzu
targetSite =['vorkers', 'hyoban', 'jyoujyou']

class GetHtml:
    """
    GetHtml as text
    """
    #Suche Site URL Registrierung
    def __init__(self, company):
        self.headers = {"User-Agent": "Mozilla/5.0 (X11; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0",}
        self.urls = {
            targetSite[0]:'https://www.vorkers.com/company_list?field=&pref=&src_str={}&sort=1&ct=top'.format(company), 
            targetSite[1]:'https://en-hyouban.com/search/?SearchWords={}'.format(company),
            targetSite[2]:'https://Börsennotierte Unternehmenssuche.com/searches/result?utf8=✓&search_query={}'.format(company)
        }

    #Holen Sie sich den vollständigen HTML-Text der Zielseite
    def getText(self):
        textList = {}
        for url in self.urls:
            res = requests.get(self.urls[url], headers=self.headers)
            text = bs4.BeautifulSoup(res.text, "html.parser")
            textList.setdefault(url, text)
        return textList

init self.headers Stellen Sie ein, um zu verschleiern, dass Sie versuchen, Informationen von einem Webbrowser abzurufen Wenn der Server der Zielwebsite erkennt, dass er versucht zu kratzen, wird er möglicherweise blockiert. Daher muss getarnt werden, dass es sich um einen Zugriff über einen Webbrowser handelt.

self.urls Legen Sie die URL der Suchseite der zu durchsuchenden Site fest Rufen Sie Unternehmensinformationen von jeder Site ab, indem Sie den vom Benutzer als Argument eingegebenen Firmennamen an den angegebenen Speicherort unter der Abfragezeichenfolge (? =) Jeder Site übergeben.

** (Abfragezeichenfolge) ** Eine bestimmte Zeichenfolge am Ende der URL, um die Informationen zu beschreiben, die Sie an den Server senden möchten. Es beginnt oft mit? =. Bei der Suche nach einem bestimmten Schlüsselwort auf der Site wird das Schlüsselwort, nach dem der Benutzer suchen möchte, unter der Abfragezeichenfolge beschrieben und an den Server gesendet. Der Server identifiziert das Wort, nach dem Sie suchen möchten, aus dieser bestimmten Zeichenfolge, sendet die erforderlichen Informationen zurück und der Browser zeigt diese Informationen an.

Mit anderen Worten, wenn Sie das zu suchende Schlüsselwort unter der Abfragezeichenfolge eingeben, können Sie suchen, ohne Zeichen in das Suchfenster einzugeben.

getText

Eine Funktion, die ein Wörterbuch mit der targetSite als Schlüssel und dem erfassten HTML-Informationswert zurückgibt. Die erfassten Informationen (HTML) werden in einem Wörterbuch gespeichert, und nur die Informationen, die Sie an die nächste Verarbeitung übergeben möchten, werden extrahiert.

__ Extraktion der notwendigen Informationen (von der Mundpropaganda) __

Zielseite: openWork (ehemals: Vorkers) / Kaishas Ruf Erforderliche Informationen: Bewertungspunkte / Firmenname

searchCompany.py


class ParseHtml:
    """
    ParseHtmlHtml to get required values
    """
    #Erwerb von Firmennamen und Bewertungspunkten
    def parseNamePoint(self, textList):
        #Tag-Registrierung für Perspektive
        nameTag =  {
            targetSite[0]:["h3", "fs-18 lh-1o3 p-r"],
            targetSite[1]:["h2", "companyName"],
        }
        pointTag = {
            targetSite[0]:["p", "totalEvaluation_item fs-15 fw-b"],
            targetSite[1]:["span", "point"],
        } 

        comNamePoint = {}
        for site in targetSite[:2]:
            try:
                #Erwerb des Firmennamens
                parseCname =  textList[site].find(nameTag[site][0], class_=nameTag[site][1])
                cname = parseCname.getText().replace('\n','').replace(' ', '')

                #Erwerb von Unternehmensbewertungspunkten
                parseCpoint = textList[site].find(pointTag[site][0], class_=pointTag[site][1])              
                cpoint = parseCpoint.getText().replace('\n','').replace(' ', '')
        
            #Verarbeitung, wenn kein Suchergebnis vorhanden ist
            except AttributeError:
                comNamePoint.setdefault(site, ['Keine Ergebnisse','Keine Ergebnisse'])
               
            #Verarbeitung bei Suchergebnis
            else:
                comNamePoint.setdefault(site, [cname, cpoint])

        return comNamePoint

parseNamePoint(self, textList) nameTag Beschriebenes HTML-Tag zum Erfassen des Firmennamens

pointTag Fügen Sie HTML-Tags hinzu, um Mundpropaganda-Bewertungen zu erhalten

** (HTML-Tag) ** Der Browser zeigt die Webseite basierend auf den vom Server gesendeten HTML-Informationen an. Also die notwendigen Informationen

** für Satz ** Da der eingegebene Firmenname in die in der Abfragezeichenfolge enthaltene URL gestrichen wird, ist die Seite je nach Firmenname möglicherweise nicht vorhanden. Hier wird hier eine Ausnahmebehandlung durchgeführt.

-Übersicht über die Ausnahmebehandlung ・ Wenn ein Suchergebnis vorhanden ist, wird ein Wörterbuch mit Bewertungspunkten und Firmenname als Wert unter Verwendung von targetSite als Schlüssel zurückgegeben.

__ Extraktion der notwendigen Informationen (aus der börsennotierten Unternehmenssuche) __

Zielwebsite: Gelistete Unternehmenssuche Erforderliche Informationen: Firmenname / Branche / Anzahl der Mitarbeiter / Durchschnittsalter / Durchschnittliche Dienstjahre / Durchschnittslohn

searchCom.py


#Wenn Sie ein börsennotiertes Unternehmen sind, erhalten Sie Unternehmensdaten
    def parseInfo(self, textList):
        #Tag-Registrierung für Perspektive
        cnumberTag = {
            targetSite[2]:['dl', 'well'],
        }
        cinfoTag = {
            targetSite[2]:['dd', 'companies_data']
        }
        
        comInfo = {}

        #Rufen Sie die URL der Unternehmensdetails vom Firmennamen ab
        try:
            parseCnumber =  textList[targetSite[2]].find(cnumberTag[targetSite[2]][0], class_=cnumberTag[targetSite[2]][1])
            cnumber = parseCnumber.getText()
            cname = mojimoji.han_to_zen(cnumber[5:].replace('\n', '').replace(' ', ''))
            detail = 'https://xn--vckya7nx51ik9ay55a3l3a.com/companies/{}'.format(cnumber[:5])
        #Verarbeitung, wenn kein Suchergebnis vorhanden ist
        except AttributeError:
            comInfo.setdefault(targetSite[2], ['Keine Daten','','','','','',''])
        #Verarbeitung bei Suchergebnis
        else:
            #Holen Sie sich HTML auf der Seite mit den Unternehmensdetails
            res = requests.get(detail)
            text = bs4.BeautifulSoup(res.text, "html.parser")

            #Perspektive der Unternehmensdetailseite
            parseCinfo =  text.find_all(cinfoTag[targetSite[2]][0], class_=cinfoTag[targetSite[2]][1])
            cinfo = parseCinfo

            #Erfassung von analysierten Inhalten
            cinfoList = []
            for info in cinfo:
                infoText = info.getText().replace('\n', '').replace('\t', '')
                cinfoList.append(infoText)
            #Firmennamen hinzufügen
            cinfoList.append(cname)

            if len(cinfoList) <= 18:
                cinfoList.append('')
            
            #Formung der notwendigen Informationen
            useList = itemgetter(0,10,14,15,16,17,18)(cinfoList)
            comInfo.setdefault(targetSite[2], useList)
            
        return comInfo

def parseInfo(self, textList) cnumberTag Bei der gelisteten Unternehmenssuche führt die einfache Eingabe des Firmennamens unter der Abfragezeichenfolge nicht zu einer URL, unter der Unternehmensdetails abgerufen werden können. Geben Sie daher ein HTML-Tag an, um die URL der Seite abzurufen, auf der detaillierte Informationen in cnumberTag abgerufen werden können.

cinfoTag Geben Sie ein Tag an, um die erforderlichen Informationen von der Seite mit den Unternehmensdetails abzurufen

** versuchen, außer *** Da auch hier möglicherweise keine Suchergebnisse vorhanden sind, wird in diesem Fall eine Ausnahmeverarbeitung durchgeführt.

** zur Aussage ** Verarbeiten Sie die Daten mit targetSite als Schlüssel als Rückgabewert, damit die Liste der erforderlichen Informationen vom Wertewörterbuch zurückgegeben werden kann.

__ Wird zusammen als Suchergebnis angezeigt __

searchCompany.py


def main(company):
    aboutCompany = {}

    #Holen Sie sich URL und HTML
    getHtml = GetHtml(company)
    text = getHtml.getText()
    urls = getHtml.urls

    #HTML-Perspektive
    parseHtml = ParseHtml()
    comNamePoint = parseHtml.parseNamePoint(text)
    comInfo = parseHtml.parseInfo(text)
    
    #Formung der Ausgabedaten
    #Firmenname und Bewertungspunkte
    for site in targetSite[:2]:
         comNamePoint[site].append(urls[site])
    aboutCompany.update(comNamePoint)
    
    #Firmendetails
    for info in comInfo:
        aboutCompany.setdefault(info, comInfo[info])
    
    #Suchbegriff
    words = mojimoji.han_to_zen(company)
    aboutCompany['searchWord'] = words


    return aboutCompany

if __name__ =="__main__":
    print(main('Softbank'))

main(company) aboutCompany HTML wird unter Verwendung des eingegebenen Firmennamens als Argument erfasst und analysiert. Es wird in einem Wörterbuch mit dem Namen aboutCompany gespeichert und als Variable zurückgegeben. Danach verarbeitet Django, um es genau anzugeben und in HTML anzuzeigen.

mojimoji Verwendet eine externe Bibliothek namens Mojimoji, die Zeichen mit halber Breite in Zeichen mit voller Breite konvertiert Die halbe und die volle Breite sind je nach Site, an der Informationen abgerufen werden, nicht einheitlich. Daher werden sie in einem Stapel konvertiert.

Am Ende

Das ist alles für diesen Kommentar. Das Programm wurde vor über einem Monat abgeschlossen, so dass es schwierig war, die Details zu vergessen. Ich kann nichts sagen, weil ich in meinem Code bemerkt habe, dass der Schmerz beim Zurücklesen von schmutzigem Code dies ist ...

Als nächstes werde ich Django und AWS Edition schreiben.

Recommended Posts

Erstellen Sie mit Python + Django + AWS eine Scraping-App und wechseln Sie Jobs
Erstellen Sie eine Desktop-App mit Python mit Electron
Startete eine Webanwendung auf AWS mit Django und wechselte Jobs
[Übung] Erstellen Sie eine Watson-App mit Python! # 1 [Sprachdiskriminierung]
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 1] ~ Django-Setup ~ eine nervenschwächende App erstellen
Machen Sie eine Lotterie mit Python
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
Lassen Sie uns eine Mac-App mit Tkinter und py2app erstellen
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
[Übung] Erstellen Sie eine Watson-App mit Python! # 3 [Klassifizierung der natürlichen Sprache]
Scraping mit Node, Ruby und Python
Lassen Sie uns eine GUI mit Python erstellen.
Scraping mit Python, Selen und Chromedriver
Kratzen mit Python und schöner Suppe
Erstellen Sie ein Empfehlungssystem mit Python
Machen Sie einen Filter mit einer Django-Vorlage
Lassen Sie uns ein Diagramm mit Python erstellen! !!
So erstellen Sie eine Überwachungskamera (Überwachungskamera) mit Opencv und Python
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Lassen Sie uns einen Web-Chat mit WebSocket mit AWS serverless (Python) durchführen!
Fraktal zum Erstellen und Spielen mit Python
Ein Memo mit Python2.7 und Python3 in CentOS
Dämonisieren Sie eine Python-Webanwendung mit Supervisor
Lassen Sie uns mit Python langsam sprechen
CentOS 6.4, Python 2.7.3, Apache, mod_wsgi, Django
Qt für Python App Desktop App
Erstellen Sie ein Webframework mit Python! (1)
Üben des Web-Scrapings mit Python und Selen
Einfaches Web-Scraping mit Python und Ruby
Machen wir einen Twitter-Bot mit Python!
Erstellen Sie ein Webframework mit Python! (2)
Berühren Sie AWS mit Serverless Framework und Python
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Todo-App mit Django erstellen ④ Ordner- und Aufgabenerstellungsfunktion implementieren
Machen Sie mit Python einen Entscheidungsbaum von 0 und verstehen Sie ihn (4. Datenstruktur)
Scraping mit Python
Scraping mit Python
Kratzen Sie das Essen mit Python und geben Sie es an CSV aus
Machen Sie Twitter Trend Bot mit Heroku + Python
Erstellen einer Python-Umgebung mit virtualenv und direnv
So entwickeln Sie eine Cart-App mit Django
Ich möchte ein Spiel mit Python machen
[Python] Erstellen Sie mit Docker eine Django-Entwicklungsumgebung
Versuchen Sie, in Python einen "Entschlüsselungs" -Code zu erstellen
Starten Sie einen Webserver mit Python und Flask
Ersetzen wir UWSC durch Python (5) Machen wir einen Roboter
Versuchen Sie, mit Python eine Diedergruppe zu bilden
Einfache Aufgabenliste, erstellt mit Python + Django
Erstellen Sie mit IntelliJ schnell eine Python Django-Umgebung
[# 1] Mach Minecraft mit Python. ~ Vorforschung und Design ~
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Lassen Sie uns mit Vue.js und Django-Rest-Framework [Teil 2] ~ Vue setup ~ eine nervenschwächende App erstellen
Holen Sie sich mit Python den Aktienkurs eines japanischen Unternehmens und erstellen Sie eine Grafik
Kombinieren Sie sich wiederholende Zeichenfolgen mit regulären Python-Ausdrücken zu einer.
Django 1.11 wurde mit Python3.6 gestartet