Web scraping débutant avec python

Quoi

Notes partagées pour des personnes spécifiques.

L'histoire d'un débutant qui a du mal à recréer un essai de grands seniors lors du scraping Web avec python.

Chose que tu veux faire

Je voudrais reproduire "Lire et écrire automatiquement des feuilles de calcul Google en utilisant Python, id: temcee".

Préparation

1: activer phantomjs

"Comment installer PhantomJS sur Windows 7, maechabin".

2: Activez l'API Google et émettez la clé

Selon "Lire et écrire automatiquement des feuilles de calcul Google en utilisant Python, id: temcee", récupérez le json avec la clé stockée. En ce moment,

3: Exécuter

Une petite réécriture.

# coding=utf-8
import os
import json
import gspread
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from oauth2client.service_account import ServiceAccountCredentials


cred_info = json.load( open( "{Réécrire en fonction de l'environnement}/spread_sheet_credential.json", "r") )


SCOPE_URL = 'https://spreadsheets.google.com/feeds'
CREDENTIAL_FILE_NAME = 'spread_sheet_credential.json'
TEMPLATE_FILE_NAME = 'spread_sheet_credential_template.txt'
SHEET_PROJECT_ID = cred_info['project_id']
SHEET_PRIVATE_KEY_ID = cred_info['private_key_id']
SHEET_PRIVATE_KEY = cred_info['private_key']
SHEET_CLIENT_EMAIL = cred_info['client_email']
SHEET_CLIENT_ID = cred_info['client_id']
SHEET_CLIENT_X509_CERT_URL = cred_info['client_x509_cert_url']


def write_news(sheet, link, max_loop_count):
    driver = webdriver.PhantomJS()
    driver.get(link)
    loop_count = 0
    while loop_count < max_loop_count:
        loop_count += 1
        print('-------------- {}Accès à la deuxième page... --------------'.format(loop_count))
        #Rédaction de feuilles de calcul
        write_techcrunch_news_elements(driver, sheet)
        #Accéder à la page suivante
        driver = access_to_next(driver)


def access_to_next(driver):
    next = driver.find_element_by_link_text('prochain')
    #Visiter une nouvelle page en cas d'expiration du délai
    page_content = '/page/'
    url = driver.current_url
    splited_url_contents = url.split(page_content)
    next_url = splited_url_contents[0] + page_content + str(int(splited_url_contents[1].split('/')[0]) + 1)
    try:
        next.click()
    except Exception as e:
        print('Depuis l'expiration du délai, un nouveau "{}Accéder.'.format(next_url))
        driver = webdriver.PhantomJS()
        driver.get(next_url)
    return driver


def write_techcrunch_news_elements(driver, sheet):
    #Attendez jusqu'à 10 secondes, en tenant compte du temps nécessaire au chargement complet de la page
    driver.set_page_load_timeout(10)
    title_dict = {}
    blocks = driver.find_elements_by_class_name('river-block')
    count = 0
    for block in blocks:
        count += 1
        ad_contain = None
        print('----- {}La deuxième rivière-le bloc est... -----'.format(count))
        try:
            ad_contain = block.find_element_by_class_name('ad-contain')
        except Exception as e:
            try:
                news_title = block.find_element_by_class_name('post-title').find_element_by_tag_name('a').text
                news_time = block.find_element_by_tag_name('time').get_attribute('datetime')
                title_dict[news_title] = news_time
                print('News No.{} title:{} date:{}'.format(count, news_title, news_time))
            except Exception as e:
                print('C'était un article sponsorisé.'.format(count))
                continue
        if ad_contain is not None:
            print('C'était une publicité.??'.format(count))
    write_to_sheet(sheet, title_dict)


def write_to_sheet(sheet, dict):
    keys = list(dict.keys())
    values = list(dict.values())
    titles = sheet.col_values(1)
    start_row_num = len(titles) + 1
    start_row = str(len(titles) + 1)
    end_row = str(len(keys) + start_row_num)
    #Écrire sur une feuille de calcul
    update_cells_with_list(sheet, 'A'+start_row, 'A'+end_row, keys, value_input_option='USER_ENTERED')
    update_cells_with_list(sheet, 'B'+start_row, 'B'+end_row, values, value_input_option='USER_ENTERED')


def access_to_sheet(gid):
    #Fichier à écrire
    credential_file = open(CREDENTIAL_FILE_NAME, 'r')
    credentials = ServiceAccountCredentials.from_json_keyfile_name( CREDENTIAL_FILE_NAME, SCOPE_URL)
    # credentials = ServiceAccountCredentials.from_json_keyfile_name(CREDENTIAL_FILE_NAME, SCOPE_URL)
    client = gspread.authorize(credentials)
    return client.open_by_key(gid)


def update_cells_with_list(sheet, from_cell, to_cell, id_list, value_input_option):
    cell_list = sheet.range('{}:{}'.format(from_cell, to_cell))
    count_num = -1
    for cell in cell_list:
        count_num += 1
        try:
            val = id_list[count_num]
        except Exception as e:
            continue
        if val is None:
            continue
        cell.value = val
    print('{}De{}J'écrirai à'.format(from_cell, to_cell))
    sheet.update_cells(cell_list, value_input_option=value_input_option)


#ID de feuille de calcul que vous souhaitez écrire
sheet_gid = {ID de la feuille de calcul}
sheet_name ={Nom de la feuille à écrire dans la feuille de calcul}
target_link = 'https://jp.techcrunch.com/page/149/'
max_loop_count = 50
#Vérifiez le numéro de ligne inscriptible supérieur de la feuille de calcul
sheet = access_to_sheet(sheet_gid).worksheet(sheet_name)
write_news(sheet, target_link, max_loop_count)

Recommended Posts

Web scraping débutant avec python
Web scraping avec python + JupyterLab
Grattage avec Python
Grattage avec Python
Web scraping avec Python Première étape
J'ai essayé webScraping avec python.
Grattage en Python (préparation)
Grattage WEB avec Python (pour mémo personnel)
[Débutant] Scrapage Web Python facile à comprendre à l'aide de Google Colaboratory
Premiers pas avec Python Web Scraping Practice
Grattage avec Python + PhantomJS
[Note personnelle] Scraping de pages Web en python3
Site de courses de chevaux Web scraping avec Python
Premiers pas avec Python Web Scraping Practice
Pratiquer le web scraping avec Python et Selenium
Scraping avec Python + PyQuery
Scraping Web facile avec Python et Ruby
Scraping RSS avec Python
[Pour les débutants] Essayez le web scraping avec Python
Exécutez régulièrement le scraping WEB avec AWS-Lambda + Python + Cron
Web scraping avec Python (prévisions météo)
Web scraping avec Python (cours de l'action)
J'ai essayé de gratter avec Python
Grattage au sélénium en Python
Grattage avec Selenium + Python Partie 1
python super débutant essaie de gratter
Grattage avec chromedriver en python
Grattage festif avec Python, scrapy
Grattage avec du sélénium en Python
Grattage Web facile avec Scrapy
Grattage avec Tor en Python
Scraping prévisions météorologiques avec python
Grattage avec Selenium + Python Partie 2
Application Web avec Python + Flask ② ③
J'ai essayé de gratter avec du python
Rationalisez la recherche Web avec Python
Application Web avec Python + Flask ④
Analyse de données pour améliorer POG 1 ~ Web scraping avec Python ~
Scrapage Web rapide avec Python (tout en prenant en charge le chargement JavaScript)
[Scraping] Scraping Python
Les débutants en Python sont bloqués dans leur premier scraping Web
raclage Web
Scraping avec Node, Ruby et Python
Scraping avec Selenium en Python (Basic)
Grattage WEB avec BeautifulSoup4 (page en couches)
Grattage avec Python, Selenium et Chromedriver
Premiers pas avec les applications Web Python
Gratter le classement Web d'Alexa avec pyQuery
Grattage avec Python et belle soupe
Surveillez les applications Web Python avec Prometheus
Obtenez une capture d'écran Web avec python
Jouons avec Excel avec Python [Débutant]
Faisons du scraping d'images avec Python
Obtenez les tendances Qiita avec le scraping Python
Web scraping pour les débutants en Python (4) -1
Mémo d'apprentissage "Scraping & Machine Learning avec Python"
Obtenez des informations météorologiques avec Python et le grattage
Exploration Web, scraping Web, acquisition de caractères et sauvegarde d'image avec python