[python] Une histoire sur la collecte de noms de compte Twitter à partir de noms de descripteurs (comme @ 123456) en combinant BeautifulSoup et Excel entrée / sortie.

Je veux gratter un nom de compte Twitter avec python! !!

Parce que j'ai pensé à ce qui précède, j'ai écrit un petit code comme ça et je vais le partager. (Cette fois, on suppose que le nom du handle est connu)

Précautions pour le grattage

En ce qui concerne le grattage, vous devez essentiellement suivre diverses règles. Lire ici

Soyez très prudent lors de son exécution car cela peut entraîner une charge sur le serveur de l'autre partie.

Flux d'acquisition d'informations

Réorganisez les noms des poignées dans la première ligne d'Excel ↓ Obtenir des informations d'Excel ↓ Recherche sur Google ↓ Extraire les informations (nom du compte) de celui-ci ↓ Répertoriez les noms de compte dans la troisième colonne d'Excel

Je vais le faire de cette façon.

Installez les modules requis

4 modules à utiliser

  1. Demandes d'obtention d'URL
  2. Openpyxl pour les opérations sur les fichiers Excel
  3. bs4 extrait du html du site
  4. Il est temps d'introduire la fonction de veille pour ne pas surcharger le serveur

J'ai créé un répertoire scraype dans Documents dans mon environnement local.

Installons 4 immédiatement en utilisant le pip ci-dessus.

pip3 install requests
pip3 install openpyxl
pip3 install BeautifulSoup4
pip3 install time

Et importez dans le fichier que vous venez de créer

handle_name-search.py


import requests
import openpyxl
from bs4 import BeautfulSoup as bs
import time

Réorganisez les noms des poignées dans la première colonne d'Excel

スクリーンショット 2020-03-18 23.51.40.png

Définissez les paramètres ci-dessus, enregistrez-le sous le nom handle.xlsx et enregistrez-le dans le dossier scraype.

Obtenir des informations sur la colonne A1 à partir d'Excel

Utilisez le module openpyxl pour charger des fichiers dans l'environnement local et utiliser Sheet1

handle_name_search.py


wb = openpyxl.laod_workbook('/Users/{Mon local}/Documents/scraype/handle.xlsx')
sheet1=wb['Sheet1']

Ceci termine le réglage de Sheet1, prenons donc toutes les colonnes A1.

handle_name_search.py


for i in range(0,sheet1.max_row):
    print(sheet1.cell(row=i+1,column=1).value

Si vous faites cela, toutes les informations de la colonne A1 seront sorties d'Excel! Alors cherchez ça!

Recherchez les extraits extraits sur Google

handle_name_search.py


req = requests.get("https//www.google.com/search?q=" + sheet1.cell(row = i+1, column=1).value)

Rechercher des tags avec des noms de compte à l'aide de Beatiful Soup

handle_name_search.py


req = req.text
soup = bs(req,"html.parser")
tags = soup.find_all("div",class_="ZINbbc xpd O9g5cc uUPGi")
if(tags[0].find("div",class_="BNeawe vvjwJb AP7Wnd") != None):
    title = tags[0].find("div",class_="BNeawe vvjwJb AP7Wnd").string

Le contenu avec lequel j'ai eu du mal ici est que le nom de classe vu dans la vérification de chrome et la classe acquise par bs4 sont différents, donc dans soup.prettify (), le titre de recherche de google est inclus dans la classe de BNeawe vvjwJb AP7Wnd. Vérification.

Supprimer les obstructions des résultats de recherche

handle_name_search.py


if "(@" in title:
    title = title.split('(@')[0]
else:
    if "- Twitter" in title:
        title = title.split('-')[0]
    if "✓" in title:
        title = title.split('✓')[0]

Enfin sortie vers Excel et enregistrez

handle_name_searchpy


sheet1.cell(row=i+1,column=3).value = title
wb.save('/Users/{Votre nom local}/Documents/scraype/handle.xlsx')

Je vais le mettre en dessous de l'image entière

handle_name_search.py


import requests
import openpyxl
from bs4 import BeautifulSoup as bs
import time


##Poignée locale.Accédez à xlsx (entrez le nom du descripteur dans la première colonne))
wb = openpyxl.load_workbook('/Users/{Votre nom local}/Documents/scraype/handle.xlsx')
sheet1=wb['Sheet1']

##Obtenez le handle de la première colonne d'Excel et affichez-le dans la troisième colonne
for i in range(0,sheet1.max_row):
    time.sleep(1)
    print(sheet1.cell(row=i+1,column=1).value)    
    req = requests.get("https://www.google.com/search?q=" + sheet1.cell(row=i+1,column=1).value)
    req = req.text
    soup = bs(req,"html.parser")
    tags = soup.find_all("div", class_="ZINbbc xpd O9g5cc uUPGi")
    if(tags[0].find("div",class_="BNeawe vvjwJb AP7Wnd") != None):
        title = tags[0].find("div", class_="BNeawe vvjwJb AP7Wnd").string 
        if "(@" in title:
            title = title.split('(@')[0]
        else:
            if "- Twitter" in title:
                title = title.split('-')[0]
            if "✓" in title:
                title = title.split('✓')[0]
        print(title)
        sheet1.cell(row=i+1,column=3).value= title
        wb.save('/Users/{Votre nom local}/Documents/scraype/handle.xlsx')
wb.save('/Users/{Votre nom local}/Documents/scraype/handle.xlsx')    

Après cela, veuillez le compiler et le vérifier. Le nom du compte a-t-il été affiché dans la troisième colonne? ??

Nous avons introduit une fonction de veille pour empêcher une attaque de serveur, mais assurez-vous de suivre les règles lors du scraping.

C'était grattant.

Recommended Posts

[python] Une histoire sur la collecte de noms de compte Twitter à partir de noms de descripteurs (comme @ 123456) en combinant BeautifulSoup et Excel entrée / sortie.
Une histoire sur Python pop and append
Une histoire sur la modification de Python et l'ajout de fonctions
entrée et sortie python
Récupérer les données souhaitées du site Web en liant Python et Excel
Collecte d'informations sur Twitter avec Python (intégration de MySQL et Python)
Une histoire sur la prédiction des préfectures à partir des noms de villes avec Jubatus
Une histoire sur tout, de la collecte de données au développement d'IA et à la publication d'applications Web en Python (3. développement d'IA)
Une histoire d'une personne qui voulait importer django depuis le shell interactif de python et enregistrer des choses dans la base de données