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