Web Scraping Anfänger mit Python

Was

Gemeinsame Notizen für bestimmte Personen.

Die Geschichte eines Anfängers, der Schwierigkeiten hat, eine Prüfung großer Senioren beim Web-Scraping mit Python nachzubilden.

Was du machen willst

Ich möchte "Google-Tabellen automatisch mit Python lesen und schreiben, id: temcee" reproduzieren.

Vorbereitung

1: Aktivieren Sie Phantomjs

"So installieren Sie PhantomJS unter Windows 7, maechabin".

2: Aktivieren Sie die Google API und geben Sie den Schlüssel aus

Holen Sie sich laut "Google-Tabellen mit Python automatisch lesen und schreiben, id: temcee" den json mit dem gespeicherten Schlüssel. In diesem Moment,

3: Ausführen

Ein wenig umschreiben.

# 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( "{Umschreiben entsprechend der Umgebung}/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('-------------- {}Zugriff auf die zweite Seite... --------------'.format(loop_count))
        #Spread Sheet schreiben
        write_techcrunch_news_elements(driver, sheet)
        #Zugriff auf die nächste Seite
        driver = access_to_next(driver)


def access_to_next(driver):
    next = driver.find_element_by_link_text('Nächster')
    #Besuchen Sie eine neue Seite, wenn eine Zeitüberschreitung auftritt
    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('Da Timeout aufgetreten ist, wird ein neues "{}Zugreifen.'.format(next_url))
        driver = webdriver.PhantomJS()
        driver.get(next_url)
    return driver


def write_techcrunch_news_elements(driver, sheet):
    #Warten Sie bis zu 10 Sekunden und berücksichtigen Sie dabei die Zeit, die die Seite zum vollständigen Laden benötigt
    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('----- {}Der zweite Fluss-Block ist... -----'.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('Es war ein gesponserter Artikel.'.format(count))
                continue
        if ad_contain is not None:
            print('Es war eine Werbung.??'.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)
    #Schreiben Sie in die Tabelle
    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):
    #Datei zum Schreiben
    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('{}Von{}Ich werde schreiben an'.format(from_cell, to_cell))
    sheet.update_cells(cell_list, value_input_option=value_input_option)


#Blatt-ID des Arbeitsblatts, das Sie schreiben möchten
sheet_gid = {Tabellenkalkulations-ID}
sheet_name ={Blattname zum Schreiben in eine Tabelle}
target_link = 'https://jp.techcrunch.com/page/149/'
max_loop_count = 50
#Überprüfen Sie die oberste beschreibbare Zeilennummer der Tabelle
sheet = access_to_sheet(sheet_gid).worksheet(sheet_name)
write_news(sheet, target_link, max_loop_count)

Recommended Posts

Web Scraping Anfänger mit Python
Web Scraping mit Python + JupyterLab
Scraping mit Python
Scraping mit Python
Web Scraping mit Python Erster Schritt
Ich habe versucht, WebScraping mit Python.
Scraping in Python (Vorbereitung)
WEB-Scraping mit Python (für persönliche Notizen)
[Anfänger] Leicht verständliches Python-Web-Scraping mit Google Colaboratory
Erste Schritte mit Python Web Scraping Practice
Scraping mit Python + PhantomJS
[Persönlicher Hinweis] Scraping von Webseiten in Python3
Pferderennseite Web Scraping mit Python
Erste Schritte mit Python Web Scraping Practice
Üben des Web-Scrapings mit Python und Selen
Scraping mit Python + PyQuery
Einfaches Web-Scraping mit Python und Ruby
Scraping von RSS mit Python
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Führen Sie das WEB-Scraping regelmäßig mit AWS-Lambda + Python + Cron aus
Web Scraping mit Python (Wettervorhersage)
Web Scraping mit Python (Aktienkurs)
Ich habe versucht, mit Python zu kratzen
Schaben mit Selen in Python
Schaben mit Selen + Python Teil 1
Python Super Anfänger versucht zu kratzen
Schaben mit Chromedriver in Python
Festliches Scraping mit Python, Scrapy
Scraping mit Selen in Python
Einfaches Web-Scraping mit Scrapy
Scraping mit Tor in Python
Kratzwettervorhersage mit Python
Schaben mit Selen + Python Teil 2
Webanwendung mit Python + Flask ② ③
Ich habe versucht, mit Python zu kratzen
Optimieren Sie die Websuche mit Python
Webanwendung mit Python + Flask ④
Datenanalyse zur Verbesserung von POG 1 ~ Web Scraping mit Python ~
Schnelles Web-Scraping mit Python (unterstützt das Laden von JavaScript)
[Scraping] Python-Scraping
Python-Anfänger bleiben beim ersten Web-Scraping stecken
Web Scraping
Scraping mit Node, Ruby und Python
Scraping mit Selen in Python (Basic)
Scraping mit Python, Selen und Chromedriver
Erste Schritte mit Python-Webanwendungen
Scraping von Alexas Web Rank mit pyQuery
Kratzen mit Python und schöner Suppe
Überwachen Sie Python-Webanwendungen mit Prometheus
Holen Sie sich Web-Screen-Capture mit Python
Lass uns mit Python mit Python spielen [Anfänger]
Lassen Sie uns mit Python Image Scraping durchführen
Holen Sie sich Qiita-Trends mit Python-Scraping
Web Scraping für Anfänger in Python (4) -1
"Scraping & maschinelles Lernen mit Python" Lernnotiz
Holen Sie sich Wetterinformationen mit Python & Scraping
Webcrawlen, Web-Scraping, Zeichenerfassung und Speichern von Bildern mit Python