[PYTHON] [Empfohlenes Tagging beim maschinellen Lernen # 2.5] Änderung des Scraping-Skripts

<ENGLISH>

Hello - I hope you have a good day. Happy weekend should be happy cording day :smile:

Ok, today I will not proceed the scripting and I'd like to modify previous script. The script is below from #2:

scraper = [ 
        ["hatenablog.com","div","class","entry-content"],
        ["qiita.com","section","itemprop", "articleBody"]
        ]
c = 0
for domain in scraper:
    print url, domain[0]
    if re.search( domain[0], url):
        break
    c += 1

response = urllib2.urlopen(url)
html = response.read()

soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
    p = re.compile(r'<.*?>')
    text += p.sub('', con.encode('utf8'))

Yes, it works, but want to use (1) BeautifulSoup instead of regular expression and (2)Hash list instead of counting inside for.

(1) BeautifulSoup

soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
    p = re.compile(r'<.*?>')
    text += p.sub('', con.encode('utf8'))

Regular Expression is strong tool, but I have to learn BeautifulSoup more. Beautiful Soup is using unique type for it's string, and we can check how to use it in user's guide. I modified it as below.

    soup = BeautifulSoup( html, "lxml" )
    soup.originalEnoding
    tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
    soup2 = BeautifulSoup(tag.encode('utf8'), "lxml")
    print "".join([string.encode('utf8') for string in soup2.strings])

Looks smarter? :satisfied: you got another soup for getting strings. Which do you like?

(2) Hash List for splitting. Watch out!

scraper = [ 
        ["hatenablog.com","div","class","entry-content"],
        ["qiita.com","section","itemprop", "articleBody"]
        ]
c = 0
for domain in scraper:
    print url, domain[0]
    if re.search( domain[0], url):
        break
    c += 1

To get splitter strings for each web site, used c as count up integer. That's not cool. So I modified as below.

    scraper = [ 
            ["hatenablog.com","div","class","entry-content"],
            ["qiita.com","section","itemprop", "articleBody"]
            ]
    numHash = {}
    for i in range(len(scraper)):
        numHash[scraper[i][0]] = i 
    for domain in scraper:
        print url, domain[0]
        if re.search( domain[0], url):
            c = numHash[domain[0]]
            break

yes, it becomes longer, but I think it's much better than previous, isn't it?

Great, next I hope I can proceed to next step... It will be getting elements for learning.

\

Ja, Domo. Es ist ein Wochenende. Lass uns programmieren gehen, um ein gutes Wochenende zu haben. Heute möchte ich das Skript, das ich in # 2 gemacht habe, ändern, bevor ich fortfahre. Das ist es.

scraper = [ 
        ["hatenablog.com","div","class","entry-content"],
        ["qiita.com","section","itemprop", "articleBody"]
        ]
c = 0
for domain in scraper:
    print url, domain[0]
    if re.search( domain[0], url):
        break
    c += 1

response = urllib2.urlopen(url)
html = response.read()

soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
    p = re.compile(r'<.*?>')
    text += p.sub('', con.encode('utf8'))

Es funktioniert immer noch, aber die Änderungen lauten: (1) Verwenden Sie BeautifulSoup anstelle des regulären Ausdrucks zum Entfernen von Tags und (2) Verwenden Sie die Hash-Liste anstelle des Count-Ups für die Trennzeichenauswahl. Ich werde.

(1) Verwenden Sie schöne Suppe

soup = BeautifulSoup( html, "lxml" )
soup.originalEnoding
tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
text = ""
for con in tag.contents:
    p = re.compile(r'<.*?>')
    text += p.sub('', con.encode('utf8'))

Reguläre Ausdrücke sind sehr praktisch, aber ich habe mich gefragt, ob ich Beautiful Soup effektiver machen könnte. In BS stehen Tools zum Extrahieren der darin enthaltenen Zeichenfolge zur Verfügung, die jedoch aufgrund des einzigartigen Zeichenfolgenformats zunächst schwierig waren. Es ist jedoch gut dokumentiert, so dass ich keine andere Wahl habe, als mich daran zu gewöhnen.

Und das ist nach der Änderung!

    soup = BeautifulSoup( html, "lxml" )
    soup.originalEnoding
    tag = soup.find( scraper[c][1], {scraper[c][2] : scraper[c][3]})
    soup2 = BeautifulSoup(tag.encode('utf8'), "lxml")
    print "".join([string.encode('utf8') for string in soup2.strings])

Fühlt es sich nicht cool an? Ich habe die Suppe geändert, um die Zeichenkette im Tag durch erneutes Ersetzen herauszuziehen.

(2) Verwenden Sie eine Hash-Liste als Trennzeichen Ungefähr hier.

scraper = [ 
        ["hatenablog.com","div","class","entry-content"],
        ["qiita.com","section","itemprop", "articleBody"]
        ]
c = 0
for domain in scraper:
    print url, domain[0]
    if re.search( domain[0], url):
        break
    c += 1

Es ist so, als würde man C-Variablen hochzählen und die Anzahl der Trennzeichen anpassen. Hmmm, wird es verrückt? Und schön verwandelt.

    scraper = [ 
            ["hatenablog.com","div","class","entry-content"],
            ["qiita.com","section","itemprop", "articleBody"]
            ]
    numHash = {}
    for i in range(len(scraper)):
        numHash[scraper[i][0]] = i 
    for domain in scraper:
        print url, domain[0]
        if re.search( domain[0], url):
            c = numHash[domain[0]]
            break

Das Skript ist länger geworden als ich erwartet hatte. Aber ich mag dieses sehr. Ich frage mich, ob ich es etwas sauberer machen kann.

Also habe ich diesmal eine selbstzufriedene Korrektur vorgenommen. Das nächste Mal denke ich, dass ich zum nächsten übergehen werde. Scraping von Links und Tag-Listen, aus denen man lernen kann. Wann kommen wir zum maschinellen Lernen? .. .. Es wird als Betrug bezeichnet.

Recommended Posts

[Empfohlenes Tagging beim maschinellen Lernen # 2.5] Änderung des Scraping-Skripts
[Empfohlenes Tagging beim maschinellen Lernen # 2] Erweiterung des Scraping-Skripts
[Empfohlenes Tagging für maschinelles Lernen # 4] Skript für maschinelles Lernen ...?
[Empfohlenes Tagging mit maschinellem Lernen # 1] Scraping von Hatena-Blog-Artikeln
2020 Empfohlen 20 Auswahlmöglichkeiten für einführende Bücher zum maschinellen Lernen
Zusammenfassung der empfohlenen APIs für künstliche Intelligenz, maschinelles Lernen und KI
Beginn des maschinellen Lernens (empfohlene Unterrichtsmaterialien / Informationen)
Empfohlene Studienreihenfolge für Anfänger des maschinellen Lernens / Deep Learning
Bildersammlung Python-Skript zum Erstellen von Datensätzen für maschinelles Lernen
Datensatz für maschinelles Lernen
Japanische Vorverarbeitung für maschinelles Lernen
Grundlagen des maschinellen Lernens (Denkmal)
Bedeutung von Datensätzen für maschinelles Lernen
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 2)
Leistungsüberprüfung der Datenvorverarbeitung für maschinelles Lernen (numerische Daten) (Teil 1)
[Python Machine Learning] Empfehlung zur Verwendung von Spyder für Anfänger (Stand August 2020)
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Maschinelles Lernen ③ Zusammenfassung des Entscheidungsbaums
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 4)
Informationen zum maschinell erlernten Meeting für HRTech
Memorandum of Scraping & Machine Learning [Entwicklungstechnik] von Python (Kapitel 5)
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Wie nutzt man maschinelles Lernen für die Arbeit? 02_AI Entwicklungsprojektübersicht
Ein einführender Leser der Theorie des maschinellen Lernens für IT-Ingenieure versuchte es mit Kaggle
[Beispiel für eine Python-Verbesserung] Was ist die empfohlene Lernseite für Python-Anfänger?
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 13 Grundlagen des neuronalen Netzwerks
Python-Lernnotiz für maschinelles Lernen von Chainer bis zum Ende von Kapitel 2
Algorithmus für maschinelles Lernen (Verallgemeinerung der linearen Regression)
Verstärken Sie Bilder für maschinelles Lernen mit Python
Erste Schritte für Anfänger des maschinellen Lernens (KI)
Eine Einführung in OpenCV für maschinelles Lernen
Warum Python für maschinelles Lernen ausgewählt wird
"Verwendbare" One-Hot-Codierungstechnik für maschinelles Lernen
Algorithmus für maschinelles Lernen (Implementierung einer Klassifizierung mit mehreren Klassen)
[Shakyo] Begegnung mit Python zum maschinellen Lernen
[Python] Webanwendungsdesign für maschinelles Lernen
Eine Einführung in Python für maschinelles Lernen
[Maschinelles Lernen] Liste der häufig verwendeten Pakete
Erstellen einer Entwicklungsumgebung für maschinelles Lernen
Maschinelles Lernen
Richten Sie die Anzahl der Stichproben zwischen Datenklassen für maschinelles Lernen mit Python aus
Ein Memorandum über Methoden, die häufig beim maschinellen Lernen mit Scikit-Learn (für Anfänger) verwendet werden.
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Eine Einführung in maschinelles Lernen für Bot-Entwickler
Klassifizierung von Gitarrenbildern durch maschinelles Lernen Teil 1
Die Geschichte, dass die Lernkosten von Python niedrig sind
Maschinelles Lernen ab 0 für theoretische Physikstudenten # 1
Python & Machine Learning Study Memo ⑤: Klassifikation von Ayame
Numerai Turnier-Fusion von traditionellen Quants und maschinellem Lernen-
Python & Machine Learning Study Memo Introduction: Einführung in die Bibliothek
Vollständige Offenlegung der beim maschinellen Lernen verwendeten Methoden
[Python] Sammeln Sie Bilder mit Icrawler für maschinelles Lernen [1000 Blatt]
Liste der Links, die Anfänger des maschinellen Lernens lernen
Überblick über maschinelle Lerntechniken, die aus Scikit-Learn gelernt wurden
Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)
Zusammenfassung der beim maschinellen Lernen verwendeten Bewertungsfunktionen