[Python] Gratter une table avec Beautiful Soup

À partir de tableaux fréquemment mis à jour ou difficiles à copier et coller Je me suis demandé si je pouvais rendre la collecte de données encore un peu plus efficace, cette fois J'ai écrit le code pour gratter avec python et l'écrire en CSV.

Définir l'environnement

MacBook Air (13-inch, Mid 2011) Processeur: Intel Core i7 à 1,8 GHz Mémoire: 4 Go DDR3 à 1333 MHz La dernière version: 10.11.5 Python: 3.6.2

Préparation

Installez Beautiful Soup. BeautifulSoup est une bibliothèque qui peut récupérer des données à partir de HTML et XML.

Cette fois, je l'ai installé en utilisant pip.

$ pip3 install beautifulsoup4
Collecting beautifulsoup4
  Downloading beautifulsoup4-4.6.0-py3-none-any.whl (86kB)
    100% |████████████████████████████████| 92kB 1.8MB/s 
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.6.0

Les autres options incluent easy_install, apt-get et le téléchargement et l'installation directs du code. Pour plus d'informations, veuillez lire "Installer Beautiful Soup" dans le document officiel ci-dessous.

https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Essayez de gratter des éléments de table

Une fois que vous avez installé beautifulsoup4, Obtenons les nouvelles informations de publication d'O'Reilly à la fois.

** Mise à jour du 20/03/2019 **: Le fichier d'écriture est maintenant ouvert avec avec.

scraping_table.py


import csv
from urllib.request import urlopen
from bs4 import BeautifulSoup
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

#Spécifier l'URL
html = urlopen("https://www.oreilly.co.jp/ebook/")
bsObj = BeautifulSoup(html, "html.parser")

#Spécifier la table
table = bsObj.findAll("table", {"class":"tablesorter"})[0]
rows = table.findAll("tr")

with open("ebooks.csv", "w", encoding='utf-8') as file:
    writer = csv.writer(file)
    for row in rows:
        csvRow = []
        for cell in row.findAll(['td', 'th']):
            csvRow.append(cell.get_text())
        writer.writerow(csvRow)

Le CSV exporté ressemble à ceci. Si vous le faites régulièrement, vous ne manquerez aucune nouvelle publication! D'ailleurs, dans le code ci-dessus, puisqu'il a été spécifié par get_text (), le lien image dans la colonne "Ajouter au panier" est vide.

ISBN,Title,prix,Mois d'émission,ajouter au chariot
978-4-87311-755-3,Conception pour améliorer les performances,"2,073",2016/06,
978-4-87311-700-3,Sécurité du réseau grâce à l'analyse des données,"3,110",2016/06,
978-4-87311-754-6,Stratégie UX,"2,592",2016/05,
978-4-87311-768-3,Une introduction aux mathématiques à partir de Python,"2,419",2016/05,
978-4-87311-767-6,Que fait le logiciel à votre insu?,"2,246",2016/05,
978-4-87311-763-8,Technique de fermentation,"3,110",2016/04,
978-4-87311-765-2,Premier Ansible,"2,764",2016/04,
978-4-87311-764-5,Technique de travail Kanban,"3,110",2016/03,

Comment postuler sur d'autres sites

En gros, vous pouvez facilement obtenir les tableaux d'autres sites en modifiant la partie suivante du code.

  1. Modifiez le nom de classe de la table que vous souhaitez obtenir
  2. S'il existe plusieurs tables avec le même nom de classe dans le site, spécifiez le numéro par le nombre entre [].
#Spécifier la table
table = bsObj.findAll("table",{"class":"tablesorter"})[0]
rows = table.findAll("tr")

À propos du CSV

Puisque j'utilise un Mac, le CSV exporté était utf-8. Si vous le lisez dans Excel tel quel, les caractères seront déformés, il est donc facile à utiliser si vous convertissez le code de caractère et le formatez. Si vous voulez savoir comment convertir, cliquez ici (http://help.peatix.com/customer/portal/articles/530797-%E3%83%80%E3%82%A6%E3%83%B3%E3 % 83% AD% E3% 83% BC% E3% 83% 89% E3% 81% 97% E3% 81% 9F% E3% 83% 95% E3% 82% A1% E3% 82% A4% E3% 83 % AB% E3% 81% AE% E6% 96% 87% E5% AD% 97% E5% 8C% 96% E3% 81% 91% E3% 81% AB% E3% 81% A4% E3% 81% 84 Veuillez à partir de% E3% 81% A6-for-mac) (site séparé)

Recommended Posts

[Python] Gratter une table avec Beautiful Soup
Grattage de table avec belle soupe
Essayez de gratter avec Python + Beautiful Soup
Un mémorandum lors de l'utilisation d'une belle soupe
[Python] Un mémorandum de belle soupe4
Grattage avec Python et belle soupe
Scraping à l'aide de Python
Scraping de sites Web à l'aide de JavaScript en Python
Gratter avec une belle soupe
Écrivez un "bot" de scraping web sans tête de base en Python avec Beautiful Soup 4
Scraping à l'aide de la syntaxe Python 3.5 Async
Web scraping avec Selenium (Python)
[Python] Supprimer en spécifiant une balise avec Beautiful Soup
J'ai fait un Line-bot avec Python!
Racler plusieurs pages avec Beautiful Soup
Créer une interface graphique python à l'aide de tkinter
Créer un tableau simple à l'aide de prettytable
Gratter avec une belle soupe en 10 minutes
[Python] Mémo de création de l'outil de grattage
[Python] Quatre-vingt-dix-neuf tables utilisant des instructions for
Grattage de site Web avec Beautiful Soup en Python
[Python] Pratique Belle Soupe ~ Grattage du tableau des cotes triple simple sur le site officiel de la course de bateaux ~
Belle soupe
[Scraping] Scraping Python
[Python] Analysez les données de match de la ligue Splatoon 2 à l'aide d'un tableau de coefficients de corrélation
[Python] Comment récupérer un fichier html local et le générer au format CSV à l'aide de Beautiful Soup
Obtenez l'URL de destination du lien en spécifiant la phrase de texte avec le grattage Python (Beautiful Soup) + XPath
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
[Python] Créer un environnement Batch à l'aide d'AWS-CDK
Essayez le scraping HTML avec la bibliothèque Python
Dessinez une structure arborescente en Python 3 à l'aide de graphviz
Un programme qui utilise Python pour lire des fichiers indésirables
Paramètres lors de l'utilisation de requêtes Python 3 et de Beautiful Soup avec crostini sur Chromebook
Mémo de raclage Python
Scraping Python get_ranker_categories
Grattage avec Python
Créer un fichier GIF en utilisant Pillow en Python
J'ai essayé le web scraping en utilisant python et sélénium
[Python] Fractionner un gros fichier Flask en utilisant Blueprint
Grattage avec Python
Belles éclaboussures de soupe
Commencez à utiliser Python
Python racle eBay
Créer une carte Web en utilisant Python et GDAL
Un chercheur d'une société pharmaceutique a résumé le raclage Web à l'aide de Python
Afficher les avis sur les médicaments à l'aide de listes en Python
J'ai essayé de lire un fichier CSV en utilisant Python
Grattage Python get_title
Python: grattage partie 1
Exécutez des fichiers Python à partir de HTML en utilisant Django
Comment rechercher des données HTML à l'aide de Beautiful Soup
Créez un fichier MIDI en Python en utilisant pretty_midi
Faisons un module pour Python en utilisant SWIG
Module de grattage "Gaspacho" qui peut être utilisé plus facilement que Beautiful Soup
Exécutez des scripts Python à partir d'Excel (en utilisant xlwings)
Python: grattage, partie 2
J'ai essayé différentes choses avec Python: le grattage (Beautiful Soup + Selenium + PhantomJS) et l'analyse morphologique
[Python] Implémentation du clustering à l'aide d'un modèle gaussien mixte