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
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/
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"
},
...
]
# 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/
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