[PYTHON] Probe abkratzen

Holen Sie sich den Titel Yahoo! News

from urllib.request import urlopen
from bs4 import BeautifulSoup
from pprint import pprint

URL = 'http://news.yahoo.co.jp/'
with urlopen(URL) as res:
  html = res.read().decode("utf-8")
    
soup = BeautifulSoup(html, 'html.parser')

titles = soup.select('.ttl a') #Holen Sie sich dom
titles = [t.contents[0] for t in titles] #Text abrufen
pprint(titles)

Ausgabeergebnis


>>>
['Mr. Trump "Justiz zu viel"',
 'PKO Daily Report Spezielle Verteidigungsinspektion angewiesen',
 'Verwaltungsfehler im Krankenhaus Vorübergehender kardiopulmonaler Stillstand',
 '200 Schüler der Mittelstufe in Spezialkleidung Fukuoka',
 'Niederländische Regierungspartei zur Aufrechterhaltung der ersten Partei',
 'Selten mit einer Wahrscheinlichkeit von 1 / 320.000 bei WBC',
 'Nakais leidenschaftliches Büro ohne es zu leugnen',
 'Watases stärkste Legende und die Existenz eines älteren Bruders']

Die Elementauswahlmethode von BeautifulSoup4 Es gibt auch "find" und "find_all", aber "select" wird oft verwendet.

Wenn beim Abrufen des Textes keine zurückgegeben wird Versuchen Sie ".string", ".text", ".contents [0]" usw. http://stackoverflow.com/questions/20750852/beautifulsoup-4-python-string-returns-none

Wettervorhersage abrufen und als CSV / JSON speichern

Holen Sie sich das Wetter

from urllib.request import urlopen
from bs4 import BeautifulSoup
from pprint import pprint
import csv
import re

tenki = []
URL = "http://weather.livedoor.com/forecast/rss/area/130010.xml"

with urlopen(URL) as res:
  html = res.read().decode("utf-8")
  
soup = BeautifulSoup(html, "html.parser")
for item in soup.find_all("item"):
    title = item.find("title").string
    if title.find("[ PR ]") == -1: #Abfallentsorgung
        text = re.sub(r'\[?.+\]\s', '', title) # []Innen löschen
        result = text.split(' - ')
        tenki.append(result)
pprint(tenki)

Ausgabeergebnis


>>>
[['Tokio', 'Wolkig', 'Maximale Temperatur ℃', '23. Juli(Tag)'],
 ['Tokio', 'Wolkig', 'Maximale Temperatur 32 ° C.', '24. Juli(Mond)'],
 ['Tokio', 'Wolkig', 'Maximale Temperatur 34 ° C.', '25. Juli(Feuer)'],
 ['Tokio', 'Bewölkt und manchmal sonnig', 'Maximale Temperatur 33 ° C.', '26. Juli(Wasser)'],
 ['Tokio', 'Bewölkt und manchmal sonnig', 'Maximale Temperatur 31 ° C.', '27. Juli(Holz)'],
 ['Tokio', 'Bewölkt und manchmal sonnig', 'Maximale Temperatur 32 ° C.', '28. Juli(Geld)'],
 ['Tokio', 'Bewölkt und manchmal sonnig', 'Maximale Temperatur 32 ° C.', '29. Juli(Boden)'],
 ['Tokio', 'Bewölkt und manchmal sonnig', 'Maximale Temperatur 32 ° C.', '30. Juli(Tag)']]

Machen Sie es einfach html.parser lxml.parser scheint gelegentlich Fehler zu haben https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Als CSV speichern

with open('weather.csv','w',newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['city','status','max','date'])
    writer.writerows(tenki)

weather.csv


place,status,max,date
Tokio,Wolkig,Maximale Temperatur ℃,23. Juli(Tag)
Tokio,Wolkig,Maximale Temperatur 32 ° C.,24. Juli(Mond)
Tokio,Wolkig,Maximale Temperatur 34 ° C.,25. Juli(Feuer)
Tokio,Bewölkt und manchmal sonnig,Maximale Temperatur 33 ° C.,26. Juli(Wasser)
Tokio,Bewölkt und manchmal sonnig,Maximale Temperatur 31 ° C.,27. Juli(Holz)
Tokio,Bewölkt und manchmal sonnig,Maximale Temperatur 32 ° C.,28. Juli(Geld)
Tokio,Bewölkt und manchmal sonnig,Maximale Temperatur 32 ° C.,29. Juli(Boden)
Tokio,Bewölkt und manchmal sonnig,Maximale Temperatur 32 ° C.,30. Juli(Tag)

CSV->JSON

rows = []
csvfile = open('weather.csv', 'r')
jsonfile = open('weather.json', 'w')
fieldnames = ('city','status','max','date')
reader = csv.DictReader(csvfile, fieldnames)
for index,row in enumerate(reader):
    if(index == 0): continue #  {"city": "city" ...}Ist unnötig
    rows.append(row)
json.dump(rows, jsonfile, ensure_ascii=False, indent=2)

weather.json


[
  {
    "date": "7\u670823\u65e5(\u65e5)",
    "status": "\u66c7\u308a",
    "city": "\u6771\u4eac",
    "max": "\u6700\u9ad8\u6c17\u6e29\u2103"
  },
  {
    "date": "7\u670824\u65e5(\u6708)",
    "status": "\u66c7\u308a",
    "city": "\u6771\u4eac",
    "max": "\u6700\u9ad8\u6c17\u6e2932\u2103"
  },
  ...
]

Holen Sie sich Bilder neuer Artikel auf ics.media und speichern Sie sie lokal

# ics.Medien kratzen
import os
from urllib.request import urlopen
from bs4 import BeautifulSoup

URL = "https://ics.media/"
with urlopen(URL) as res:
    html = res.read().decode("utf-8")
    
soup = BeautifulSoup(html, "html.parser")

#Holen Sie sich Bilder (und Titel) von neuen Artikeln
topics = soup.select(".topicsContainer")[0].nextSibling
topics_urls = topics.select(".thumb img")
topics_ttls = topics.select(".entryTitle a")
img_urls = [e["src"] for e in topics_urls]
img_ttls = [e.string for e in topics_ttls]

"""
#Wenn es sich um einen relativen Pfad handelt, konvertieren Sie ihn in einen absoluten Pfad
#Listeneinschlussnotation, ternärer Operator
img_urls = [u if u.find("http") == 0 else URL + u for u in img_urls]
"""

#sparen
img_dir = "images"
if not os.path.exists(img_dir):
    os.mkdir(img_dir)
    
for i,url in enumerate(img_urls):
    print("Artikel"+str(1+i), img_ttls[i])
    print(url)
    with urlopen(url) as res:
        img = res.read()
        with open(img_dir + "/entry_image%d.png " % (i+1), "wb") as f:
            f.write(img)

Ausgabeergebnis


>>>
Artikel 1 Grundkenntnisse des CSS-Designs, die Web-Ersteller kennen sollten
https://ics.media/wp-content/uploads/2017/03/170315_eyecatch-640x256.jpg
Artikel 2 Nur mit CSS3 ausgedrückt! Ich habe eine Mikrointeraktion erstellt, die mit Kopien verwendet werden kann
https://ics.media/wp-content/uploads/2017/03/main-640x256.png
Artikel 3 Die Qualität der Werbewebsites ist erstaunlich!5 inländische Websites, die in letzter Zeit ein heißes Thema geworden sind
https://ics.media/wp-content/uploads/2017/03/170227_web_trend_1611_1702_eye-640x256.jpg
... (weggelassen) ...

Holen Sie sich Geschwisterelemente http://tdoc.info/beautifulsoup/

OS-Modul https://docs.python.jp/3/library/os.html

Aufzählungsfunktion Schleife mit Index http://python.civic-apps.com/zip-enumerate/

Holen Sie sich von Site-Rendering-DOM mit JavaScript

chrome dev tool Settings > Preferences > Debugger > Disable JavaScript

Wenn Sie JS deaktivieren und neu laden und das Element verschwindet, Sites, an denen DOM dynamisch von JS generiert wird

Dieses Mal werde ich PhantomJS und Selenium verwenden.

$ brew install phantomjs $ pip3 install —upgrade selenium

from selenium import webdriver
from bs4 import BeautifulSoup
from pprint import pprint

URL = "https://dokusho-ojikan.jp/original/#!top"

driver = webdriver.PhantomJS()
driver.get(URL)
html = driver.page_source

bs = BeautifulSoup(html, "html.parser")
img_urls = [img.get("src") for img in bs.select("#unique-pickup img")]
for u in img_urls:
    print(u)

Ausgabeergebnis


>>>
https://cdn.om.dokusho-ojikan.jp/img/1f387c10-a8f8-11e6-8a10-525431b7cd60.jpg
https://cdn.om.dokusho-ojikan.jp/img/98c2e066-9a44-11e5-9ae2-52540e2de543.png
https://cdn.om.dokusho-ojikan.jp/img/7adbba1b-344b-11e5-be53-5254f877f35f.jpg
... (weggelassen) ...

Recommended Posts

Probe abkratzen
Schaben 1
Beginn des Schabens
PyAudio-Probe
[Scraping] Python-Scraping
Web Scraping
Python-Scraping-Memo
Schaben mit Selen
Python Scraping get_ranker_categories
Schaben mit Selen ~ 2 ~
Scraping mit Python
Über Twitter Scraping
Scraping mit Python
Web Scraping (Prototyp)
Python-Abschlussbeispiel
Beispiel Adaptive MCMC
Python Scraping eBay
Schaben mit Selen
Python Scraping get_title
Python: Scraping Teil 1
[PyTorch] Probe ② ~ TENSOR ~
[PyTorch] Beispiel ① ~ NUMPY ~
Scraping mit Python
Beispiel für maschinelles Lernen
Python: Scraping Teil 2