[PYTHON] [Balisage recommandé dans le machine learning # 2.5] Modification du script de scraping

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

\

Oui, domo. C'est un week-end. Allons coder pour passer un bon week-end. Aujourd'hui, j'aimerais modifier le script que j'ai fait dans # 2 avant de continuer. Ça y est.

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'))

Cela fonctionne toujours, mais les changements sont (1) utiliser BeautifulSoup au lieu de l'expression régulière pour la suppression des balises, et (2) utiliser la liste de hachage au lieu du décompte pour la sélection du délimiteur. Je vais.

(1) Utilisez une belle soupe

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'))

Les expressions régulières sont très pratiques, mais je me demandais si je pourrais rendre Beautiful Soup plus efficace. Dans BS, des outils pour extraire la chaîne de caractères à l'intérieur sont disponibles, mais c'était difficile au début en raison du format de chaîne de caractères unique. Cependant, il est bien documenté, donc je n'ai pas d'autre choix que de m'y habituer.

Et c'est après le changement!

    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])

N'est-ce pas cool? J'ai changé la soupe pour retirer la chaîne de caractères de l'étiquette en la remplaçant à nouveau.

(2) Utilisez une liste de hachage comme délimiteur À propos d'ici.

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

C'est comme compter les variables C et ajuster le nombre de délimiteurs. Hmmm, ça va être fou? Et, joliment transformé.

    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

Le script est devenu plus long que prévu. Mais j'aime beaucoup celui-ci. Je me demande si je peux le rendre un peu plus propre.

Donc, cette fois, j'ai fait une correction auto-satisfaisante. La prochaine fois, je pense que je passerai à la suivante. Scraping de liens et de listes de balises pour apprendre. Quand arriverons-nous à l'apprentissage automatique? .. .. C'est sur le point d'être qualifié de fraude.

Recommended Posts

[Balisage recommandé dans le machine learning # 2.5] Modification du script de scraping
[Balisage recommandé dans le machine learning # 2] Extension du script de scraping
[Balisage recommandé pour l'apprentissage automatique # 4] Script d'apprentissage automatique ...?
[Balisage recommandé avec le machine learning # 1] Scraping d'articles de blog Hatena
20 sélections recommandées en 2020 de livres d'introduction à l'apprentissage automatique
Résumé des API recommandées pour l'intelligence artificielle, l'apprentissage automatique et l'IA
Début de l'apprentissage automatique (matériel didactique / informations recommandés)
Ordre d'étude recommandé pour les débutants en apprentissage automatique / apprentissage en profondeur
Script Python de collection d'images pour créer des ensembles de données pour l'apprentissage automatique
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Bases de l'apprentissage automatique (mémoire)
Importance des ensembles de données d'apprentissage automatique
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 2)
Vérification des performances du prétraitement des données pour l'apprentissage automatique (données numériques) (partie 1)
[Apprentissage automatique Python] Recommandation d'utilisation de Spyder pour les débutants (à partir d'août 2020)
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Apprentissage automatique ③ Résumé de l'arbre de décision
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 4)
Informations sur les réunions d'apprentissage automatique pour HRTech
Mémorandum of scraping & machine learning [technique de développement] par Python (chapitre 5)
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Comment utiliser l'apprentissage automatique pour le travail? 02_Aperçu du projet de développement AI
Un lecteur d'introduction à la théorie de l'apprentissage automatique pour les ingénieurs informatiques a essayé Kaggle
[Exemple d'amélioration de Python] Quel est le site d'apprentissage recommandé pour les débutants en Python?
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 13 Bases du réseau neuronal
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer jusqu'à la fin du chapitre 2
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
Amplifiez les images pour l'apprentissage automatique avec Python
Premiers pas pour les débutants en apprentissage automatique (IA)
Une introduction à OpenCV pour l'apprentissage automatique
Pourquoi Python est choisi pour l'apprentissage automatique
Méthode d'encodage à chaud "utilisable" pour l'apprentissage automatique
Algorithme d'apprentissage automatique (implémentation de la classification multi-classes)
[Shakyo] Rencontre avec Python pour l'apprentissage automatique
[Python] Conception d'applications Web pour l'apprentissage automatique
Une introduction à Python pour l'apprentissage automatique
[Apprentissage automatique] Liste des packages fréquemment utilisés
Créer un environnement de développement pour l'apprentissage automatique
Apprentissage automatique
Alignez le nombre d'échantillons entre les classes de données pour l'apprentissage automatique avec Python
Un mémorandum de méthode souvent utilisé dans l'apprentissage automatique utilisant scikit-learn (pour les débutants)
Mémo d'apprentissage automatique d'un ingénieur débutant Partie 1
Une introduction à l'apprentissage automatique pour les développeurs de robots
Classification des images de guitare par apprentissage automatique Partie 1
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Apprentissage automatique à partir de 0 pour les étudiants en physique théorique # 1
Mémo d'étude Python & Machine Learning ⑤: Classification d'Ayame
Tournoi Numerai - Fusion de quants traditionnels et apprentissage automatique -
Mémo d'étude Python & Machine Learning ②: Introduction de la bibliothèque
Divulgation complète des méthodes utilisées dans l'apprentissage automatique
[Python] Collectez des images avec Icrawler pour l'apprentissage automatique [1000 feuilles]
Liste des liens que les débutants en apprentissage automatique apprennent
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
À propos du contenu de développement de l'apprentissage automatique (exemple)
Résumé des fonctions d'évaluation utilisées dans l'apprentissage automatique