À 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.
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
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/
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,
En gros, vous pouvez facilement obtenir les tableaux d'autres sites en modifiant la partie suivante du code.
#Spécifier la table
table = bsObj.findAll("table",{"class":"tablesorter"})[0]
rows = table.findAll("tr")
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