Wenn Sie "Anfragen" verwenden, schreiben Sie diese normalerweise wie folgt:
from bs4 import BeautifulSoup
import requests
res = requests.get(url)
soup = BeautifulSoup(res.content, 'html.parser')
Da es Websites gibt, die damit verstümmelt sind, können die verstümmelten Zeichen durch die folgenden Schritte erheblich beseitigt werden.
from bs4 import BeautifulSoup
import requests
res = requests.get(url)
soup = BeautifulSoup(res.content, "lxml", from_encoding='utf-8')
Erläuterung | Codebeispiel |
---|---|
1 Suche | soup.find('li') |
Durchsuche alle Tags | soup.find_all('li') |
Attributsuche | soup.find('li', href='html://www.google.com/') |
Holen Sie sich mehrere Elemente | soup.find_all(['a','p']) |
ID-Suche | soup.find('a', id="first") |
Klassensuche | soup.find('a', class_="first") |
Attributerfassung | first_link_element['href'] |
Textsuche | soup.find('dt' ,text='Suchbegriff') |
Suchen Sie nach Teiltextübereinstimmungen | soup.find('dt' ,text=re.compile('Suchbegriff')) |
Übergeordnetes Element abrufen | .parent |
Holen Sie sich eines der folgenden Elemente | .next_sibling |
Holen Sie sich alle folgenden Elemente | .next_siblings |
Holen Sie sich 1 vorheriges Element | .previous_sibling |
Holen Sie sich alle vorherigen Elemente | .previous_siblings |
Holen Sie sich Textelemente | .string |
Erläuterung | Codebeispiel |
---|---|
1 Suche | soup.select_one('CSS-Selektor') |
Suche alle | soup.select('CSS-Selektor') |
Erläuterung | Codebeispiel |
---|---|
ID-Suche | soup.select('a#id') |
Klassensuche | soup.select('a.class') |
Mehrfachsuche nach Klasse | soup.select('a.class1.class2') |
Attributsuche 1 | soup.select('a[class="class"]') |
Attributsuche 2 | soup.select('a[href="http://www.google.com"]') |
Attributsuche 3 | soup.select('a[href]') |
Holen Sie sich untergeordnete Elemente | soup.select('.class > a[href]') |
Holen Sie sich Nachkommen Elemente | soup.select('.class a[href]') |
Ändern Sie das Attributelement entsprechend dem Element, das Sie suchen möchten.
id
, class
, href
, name
, summary
usw.
Fügen Sie >
ein, wenn Sie nur untergeordnete Elemente erhalten möchten (eine Ebene tiefer), und setzen Sie Leerzeichen
, wenn Sie Nachkommenelemente erhalten möchten (alle eine Ebene tiefer).
Bei Verwendung mit Colab kann Selenium nicht heruntergeladen werden und es können keine UI-Spezifikationen angegeben werden. Diese Einstellung ist erforderlich.
#Laden Sie die für die Verwendung von Selen benötigten Bibliotheken herunter
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium
from selenium import webdriver
#Einstellungen für die Verwendung des Treibers ohne Benutzeroberfläche
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('chromedriver',options=options)
driver.implicitly_wait(10)
Als Anwendungsfall, wenn das Element nicht nur von Beautiful Soup erfasst werden kann Wenn Sie die Seite mit Seleniumu laden und dann die erforderlichen Informationen mit Beautiful Soup extrahieren möchten.
driver.get(url)
html = driver.page_source.encode('utf-8')
soup = BeautifulSoup(html, 'html.parser')
Erläuterung | Codebeispiel |
---|---|
Öffne URL | driver.get('URL') |
Geh einen Schritt zurück | driver.back() |
Gehen Sie einen Schritt vorwärts | driver.forward() |
Browser aktualisieren | driver.refresh() |
Holen Sie sich die aktuelle URL | driver.current_url |
Holen Sie sich den aktuellen Titel | driver.title |
Aktuelles Fenster schließen | driver.close() |
Schließen Sie alle Fenster | driver.quit() |
Holen Sie sich Elemente in der Klasse | driver.find_element_by_class_name('classname') |
Element nach ID abrufen | driver.find_element_by_id('id') |
Holen Sie sich Elemente mit XPATH | driver.find_element_by_xpath('xpath') |
Textsuche auf XPATH | driver.find_element_by_xpath('//*[text()="strings"]') |
Text-Teilübereinstimmungssuche mit XPATH | driver.find_element_by_xpath('//*[contains(text(), "strings")]') |
Klicken Sie auf ein Element | driver.find_element_by_xpath('XPATH').click() |
Text Eingabe | driver.find_element_by_id('ID').send_keys('strings') |
Text abrufen | driver.find_element_by_id('ID').text |
Attribute abrufen(Für href) | driver.find_element_by_id('ID').get_attribute('href') |
Bestimmen Sie, ob das Element angezeigt wird | driver.find_element_by_xpath('xpath').is_displayed() |
Stellen Sie fest, ob das Element gültig ist | driver.find_element_by_xpath('xpath').is_enabled() |
Bestimmen Sie, ob ein Element ausgewählt ist | driver.find_element_by_xpath('xpath').is_selected() |
from selenium.webdriver.support.ui import Select
element = driver.find_element_by_xpath("xpath")
Select(element).select_by_index(indexnum) #Nach Index auswählen
Select(element).select_by_value("value") #Wert des Wertes
Select(element).select_by_visible_text("text") #Text anzeigen
Erläuterung | Codebeispiel |
---|---|
Wählen Sie alle Elemente aus | //* |
Wählen Sie alle Elemente aus | //a |
Wählen Sie ein Attribut | @href |
Wählen Sie mehrere Elemente aus | [a or h2] |
Element nach ID abrufen | //*[@id="id"] |
Holen Sie sich Elemente mit Klasse | //*[@class="class"] |
Textsuche | //*[text()="strings"] |
Teilweise Suche nach Text | //*[contains(text(), "strings")] |
Teilweise Übereinstimmung der Klasse | //*contains(@class, "class") |
Holen Sie sich den nächsten Knoten | /following-sibling::*[1] |
Zwei a Elemente nach | /following-sibling::a[2] |
Holen Sie sich den hinteren Knoten | /preceding-sibling::*[1] |
Informationen zum Abrufen anderer Knoten finden Sie hier
Wird verwendet, wenn beim Klicken eine neue Registerkarte ohne Seitenübergang erstellt wird
handle_array = driver.window_handles
driver.switch_to.window(handle_array[1])
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
#Warten Sie, bis alle Elemente auf der Seite geladen sind (Timeout-Beurteilung in 15 Sekunden).
WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
#Warten Sie, bis das Element auf der Seite mit der angegebenen ID geladen ist (Timeout-Beurteilung in 15 Sekunden).
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, 'ID-Name')))
#KLASSENname Warten Sie, bis das Element auf der angegebenen Seite geladen ist (Timeout-Beurteilung in 15 Sekunden).
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CLASS_NAME, 'Klassenname')))
#Warten Sie, bis das Element auf der Seite geladen ist, das durch den CLASS-Namen in Xpath angegeben ist (Timeout-Beurteilung in 15 Sekunden).
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.XPATH, 'xpath')))
target = driver.find_element_by_xpath('xpath')
driver.execute_script("arguments[0].click();", target)
import pandas as pd
columns = ['Gegenstand 1', 'Punkt 2', 'Punkt 3', 'Punkt 4', 'Punkt 5']
df = pd.DataFrame(columns=columns)
#Datenerfassungsprozess
se = pd.Series([data1, data2, data3, data4, data5], columns)
df = df.append(se, columns)
from google.colab import files
filename = 'filename.csv'
df.to_csv(filename, encoding = 'utf-8-sig')
files.download(filename)
from google.colab import drive
filename = filename.csv'
path = '/content/drive/My Drive/' + filename
with open(path, 'w', encoding = 'utf-8-sig') as f:
df.to_csv(f)
#Laden Sie die Bibliotheken herunter, die für die Arbeit mit Tabellenkalkulationen erforderlich sind
!pip install gspread
from google.colab import auth
from oauth2client.client import GoogleCredentials
import gspread
#Authentifizierungsprozess
auth.authenticate_user()
gc = gspread.authorize(GoogleCredentials.get_application_default())
ss_id = 'Tabellenkalkulations-ID'
sht_name = 'Blattname'
workbook = gc.open_by_key(ss_id)
worksheet = workbook.worksheet(sht_name)
#Bei der Datenerfassung
worksheet.acell('B1').value
worksheet.cell(2, 1).value
#Beim Aktualisieren
worksheet.update_cell(row, column, 'Inhalt aktualisieren')
Erläuterung | Codebeispiel |
---|---|
Wählen Sie die Tabelle nach ID aus | gc.open_by_key('ID') |
Wählen Sie die Tabelle nach URL aus | gc.open_by_url('URL') |
Holen Sie sich den Titel der Tabelle | workbook.title |
Tabellenkalkulations-ID abrufen | workbook.id |
Erläuterung | Codebeispiel |
---|---|
Blatt für Blatt Name abrufen | workbook.worksheet('Blattname') |
Holen Sie sich ein Blatt mit Index | workbook.get_worksheet(index) |
Holen Sie sich alle Blätter in einem Array | workbook.worksheets() |
Blattnamen abrufen | worksheet.title |
Blatt-ID abrufen | worksheet.id |
Erläuterung | Codebeispiel |
---|---|
Datenerfassung nach A1-Methode | worksheet.acell('B1').value |
Datenerfassung nach der R1C1-Methode | worksheet.cell(1, 2).value |
Wählen Sie mehrere Zellen aus und erhalten Sie ein eindimensionales Array | worksheet.range('A1:B10') |
Daten für ausgewählte Zeilen abrufen | worksheet.row_values(1) |
Formel für ausgewählte Zeile abrufen | worksheet.row_values(1,2) |
Daten für ausgewählte Spalten abrufen | worksheet.column_values(1) |
Formel für ausgewählte Spalte abrufen | worksheet.column_values(1,2) |
Holen Sie sich alle Daten | worksheet.get_all_values() |
Aktualisieren Sie den Zellenwert mit der A1-Methode | worksheet.update_acell('B1','Zu aktualisierender Wert') |
Aktualisieren Sie den Zellenwert mit der R1C1-Methode | worksheet.update_cell(1,2,'Zu aktualisierender Wert') |
[Referenzseite] BeautifulSoup4-Spickzettel (Selektor usw.) Python3-Memo - Wunderschönes Soup4-Zeug Grundlagen des CSS-Selektors für das Web-Scraping Zusammenfassung der häufig verwendeten Betriebsmethoden des Selenium-Webdrivers Was ist XPath? Lerne die Grundlagen von XPath! Unverzichtbar für Web Scraping! Zusammenfassung von Xpath Zusammenfassung der Verwendung der gspread-Bibliothek! Arbeiten mit Tabellenkalkulationen in Python
Recommended Posts