Aus diesem Grund wollte ich die Übungen für gesundes Gehen auf dieser Seite dokumentieren. Ich habe ** Sphinx ** als Test studiert, also werde ich dies verwenden. Ich habe das Gefühl, dass ich es gewaltsam benutze, daher war es vielleicht äußerst ineffizient, aber es ist gut, weil es relativ gut gemacht wurde.
Leere Seiten werden in der Mitte gemischt, aber es ist okay.
Sphinx
http://sphinx-users.jp/
BeautifulSoup
http://tdoc.info/beautifulsoup/
Es scheint etwas zu geben, das ** HTMLParser ** heißt, aber ich wusste nicht, wie ich es verwenden sollte, und es war für mich persönlich leicht zu verstehen, also habe ich es verwendet.
pip install BeautifulSoup
Verwenden Sie diese Option anschließend, um das Erklärungsbild und den Erklärungstext aus dem HTML-Code der betreffenden Seite zu extrahieren, und verwenden Sie Sphinx, um es in ein Dokument umzuformen. Dazu später mehr.
Zunächst lautet die URL der Turnseite
http://kaigoouen.net/program/gymnastics/gymnastics_{Turnnummer}_{Seitennummer}.html
Mit diesem Gefühl gibt es zwei Stellen, an denen Zahlen eingegeben werden (es ist mir egal, aber macht diese Site HTML für jede Seite?).
Es gibt drei Stufen gesunder Gehübungen: Hüpfen, Schritt und Springen, aber es scheint, dass ** Hopfen 2 hat, Schritt 3 hat und Springen 4 ** (Übrigens scheint 1 wie die vorherige Theorie zu sein, also diesmal Ist unnötig).
Da jede der Sprung-, Schritt- und Sprungübungen aus mehreren Seiten besteht, ** wird hier die Anzahl der Seiten eingegeben **.
Wenn Sie denken, basierend auf diesen, ist es ein Fluss wie dieser?
Ich habe vor, die Materialien für Hopfen, Schritte und Sprünge einzeln herzustellen, daher ist dies im Allgemeinen in Ordnung.
Betrachten Sie in dem oben betrachteten Ablauf Teil 3.
Anscheinend ist der Teil, den ich will, im div-Element ** der Klasse ** box02.
Zum Beispiel sehen Hopfen so aus.
<div class="box02">
<h2>
<img alt="Artikelname" src="text.gif"></img>
</h2>
<div class="box02_txt_hop">
<div class="hop_box">
<div class="hop_txt">Kommentar</div>
<div class="hop_image">
<img alt="Referenzfoto" src="image.jpg "></img>
</div>
</div>
<div class="hop_box">
<!--Artikel Fortsetzung-->
</div>
</div>
<div class="box02">
<!--Nächstes Objekt-->
</div>
Also, was ich dabei will, ist ...
das ist alles. Verwenden Sie das BeautifulSoup-Modul, um diese einzugrenzen. Es war nicht allzu schwierig, weil Sie ** finden ** oder ** findAll ** mit Element- oder Klassennamen finden können. Schreiben Sie danach ein Python-Skript, das das eingegrenzte Skript in das erste Format für Sphinx umschreibt. Geben Sie einfach Ihr Bestes, während Sie sich das [Dokument] ansehen (http://sphinx-users.jp/).
Vorläufig wurde der Artikelname auf die Überschrift ** gesetzt, und die Erklärung und das Bild wurden nebeneinander angeordnet, sodass die Tabellenmethode verwendet wurde.
Beim Extrahieren der Erklärung und des Bildes jedes Elements dachte ich zuerst an ** Lassen Sie uns den relevanten Teil von oben nach Klassennamen verfolgen **. Als ich die Elemente von ** Firefox mit ** untersuchte, schien es mir, dass ich mich wie ** box02> box02_txt_hop> hop_box> hop_image oder hop_txt ** damit beschäftigen sollte, also tat ich es. Dann wird der letzte Kommentar für jedes Element weggelassen. Bei genauerem Hinsehen schien es also, dass aus irgendeinem Grund nur die Erklärung am Ende jedes Elements nicht in der ** hop_box-Klasse sowohl für den Text als auch für das Bild enthalten war und sich direkt unter der oberen box02_txt_hop ** (Grund) befand. Ist unbekannt). Daher wird hop_box von Anfang an ignoriert. Erstens scheinen die find and findAll von BeautifulSoup ** von allen Elementen unterhalb des Zielelements gemäß den Bedingungen ** zu suchen, so dass es anscheinend nicht erforderlich war, jeweils eine Ebene zu durchsuchen.
Wenn der Inhalt nur Text wäre, wäre er schöner, aber ich persönlich mochte ihn nicht, weil es schwer zu erkennen war, ob er Bilder enthielt. Ich wusste jedoch nicht, wie ich den Stil ändern sollte (PDF außer HTML), also habe ich mich darum gekümmert, indem ich nacheinander eine neue Tabelle erstellt habe.
Wird häufig bei der Ausgabe von .rst-Dateien aus Python-Skripten verwendet.
type(text)
Ich werde es stetig reparieren, während ich es überprüfe.
Es scheint zwei Möglichkeiten zu geben, ** rst2pdf ** und ** latex **, aber die erstere schien einfacher zu sein, also habe ich mich dieses Mal für ** rst2pdf ** entschieden.
Und ich war nacheinander süchtig danach (vielleicht wollte ich es nicht mit pip installieren).
ImportError: reportlab requires Python 2.7+ or 3.3+; 3.0-3.2 are not supported.
Dann beziehen Sie sich auf hier
pip install -U reportlab==2.5
Dann ändert sich der Fehler.
>[ERROR] pdfbuilder.py:130 need more than 3 values to unpack
Traceback (most recent call last):
File "/home/vagrant/www/public/hopstepjump/venv/lib/python2.6/site-packages/rst2pdf/pdfbuilder.py", line 78, in write
docname, targetname, title, author = entry[:4]
ValueError: need more than 3 values to unpack
FAILED
build succeeded, 1048 warnings.
Kurz gesagt, die Art und Weise, ** conf.py ** zu schreiben, war anders. Zuerst habe ich die Dokumente, die ich erstellen möchte, in ** pdf_documents ** in pdf eingefügt
```py
('hop','step','jump'),
Ich dachte, dass es so verbunden sein würde, aber es war anders,
('docName', u'Dateiname', u'Titel, der auf das Cover von PDF kommt', u'Autor'),
Es scheint, dass (in der Tat wurde es im Handbuch geschrieben). Dieses Taple ist in der Liste enthalten. Wenn Sie also mehrere Dokumente in PDF konvertieren möchten, können Sie mehrere Taples hinzufügen.
Wie auch immer, werfen Sie einen zweiten Blick und machen Sie "pdf"
IOError: decoder jpeg not available identity=[ImageReader@0x3a3ce10 filename='/home/vagrant/www/public/hopstepjump/venv/lib/python2.6/site-packages/rst2pdf/images/image-missing.jpg'] FAILED build succeeded.
Ein weiteres neues Problem. Ist JPEG nutzlos?
Als ich es nachgeschlagen habe, scheint es, dass libjpeg notwendig ist, nicht dass PIL schlecht ist. http://kwmt27.net/index.php/2013/07/14/python-pil-error-decoder-jpeg-not-available/
Installieren Sie dies und installieren Sie PIL neu Kannst du mit lecker gehen?
yum search libjpeg
============================= N/S Matched: libjpeg ============================= libjpeg-turbo-devel.i686 : Headers for the libjpeg-turbo library libjpeg-turbo-devel.x86_64 : Headers for the libjpeg-turbo library libjpeg-turbo-static.x86_64 : Static version of the libjpeg-turbo library libjpeg-turbo.x86_64 : A MMX/SSE2 accelerated library for manipulating JPEG : image files libjpeg-turbo.i686 : A MMX/SSE2 accelerated library for manipulating JPEG image : files
Ich weiß nicht, welches, also versuche `` `yum install libjpeg``` (ich hoffe, dass du das beste für dich auswählst).
Updated: libjpeg-turbo.x86_64 >0:1.2.1-3.el6_5
Complete!
Es scheint, dass es getan wurde, also folgen Sie der Seite, auf die ich verwiesen habe
pip install -i pillow
make pdf
IOError: decoder jpeg not available identity=[ImageReader@0x221e150 filename='/home/vagrant/www/public/hopstepjump/venv/lib/python2.6/site-packages/rst2pdf/images/image-missing.jpg'] FAILED build succeeded.
Keine Fortschritte ...
yum list | grep libjpeg
Als ich es ausprobierte, wurde es richtig installiert, aber Kissen und Pil sind gleich, nicht wahr?
Damit
pip install pil
Aber es ändert sich nicht ...
Ist das das? http://all-rounder-biz.blogspot.jp/2013/06/macioerror-decoder-jpeg-not-available.html Falsch·····.
Dann das? http://d.hatena.ne.jp/rougeref/20130116 Ja, ich war enttäuscht ...
Nun, wenn Sie nach der Installation von PIL auf das Display schauen
*** TKINTER support not available
*** JPEG support not available
--- ZLIB (PNG/ZIP) support available
*** FREETYPE2 support not available
*** LITTLECMS support not available
--------------------------------------------------------------------
Es ist geworden. Natürlich bleibt JPEG nicht verfügbar. Die Fehlermeldung lügt nicht.
Ist es hier? http://dev-pao.blogspot.jp/2010/04/python-imaging-library-piljpeg.html Nein ...
Weiter http://d.hatena.ne.jp/rougeref/20130116
Oh, vielleicht ...
yum install libjpeg-devel
Löschen Sie dann die PIL und installieren Sie sie erneut.
--- JPEG support available
Es scheint, dass es daran lag, dass ** devel nicht installiert werden konnte **. Wie auch immer, das JPEG-Problem ist gelöst, also `` `PDF erstellen```.
[ERROR] image.py:110 Missing image file: /home/vagrant/www/public/hopstepjump/http://kaigoouen.net/img/hop_pic_108.jpg
\u304b\u304b\u3068\u304b\u3089\u3064\u3044\u3066\u30fb\u30fb\u30fb\u3064\u307e\u5148\u3067\u3051\u308a\u51fa\u3059\u3001\u3092\u7e70\u308a\u8fd4\u3057\u306a\u304c\u3089\u3001\u6b69\u304d\u307e\u3057\u3087\u3046\u3002 line done build succeeded.
Okay, es funktioniert nicht, aber ** der Ort, an dem ich versuche, das Bild zu laden, ist offensichtlich seltsam **. Aber ich weiß nicht, wie ich das beheben soll. Soll es nicht Bilder von außen holen?
Es war schwierig, es als Fehlermeldung zu überprüfen, daher habe ich verschiedene Experimente versucht und festgestellt, dass es in **. Rst Ersetzen war. ) Schien in Ordnung zu sein **. Ist es eine Art Fehler? Wie auch immer, die Lösung besteht darin, es nicht zu verwenden.
Als nächstes werden die Charaktere verstümmelt.
Was verdächtig ist, ist
sh: fc-match: Befehl nicht gefunden [ERROR] findfonts.py:208 Unknown font: DejaVu Sans Mono-Bold
Teil (voll aus). Was ist ** fc-match **? Wenn ich es gegoogelt habe, sieht es aus wie ein Befehl, der in einer Bibliothek namens ** fontconfig ** enthalten ist.
Dann mit lecker
yum search fontconfig
=========================== N/S Matched: fontconfig ============================ fontconfig.i686 : Font configuration and customization library fontconfig.x86_64 : Font configuration and customization library fontconfig-devel.i686 : Font configuration and customization library fontconfig-devel.x86_64 : Font configuration and customization library
Es gibt auch gewöhnliche und sich entwickelnde. Ich werde nicht zweimal auf die gleiche Brunft treten ... also habe ich Develop installiert. Und als ich erneut versuchte, "PDF erstellen" zu machen, wurde der vorherige "Befehl nicht gefunden" behoben. Die folgende Zeile ist jedoch ungelöst. Erstens gibt es "DejaVu Sans Mono-Bold", aber ich kenne eine solche Schriftart nicht. Was ist das?
http://www.fontsquirrel.com/fonts/dejavu-sans-mono
Oh, es ist auf jeden Fall eine Schrift für Englisch. Bedeutet das, dass Sie das Stylesheet nicht lesen können? ** conf.py ** schien nicht falsch zu sein, also schau dir ** ja.json ** an, das ist das Stylesheet. Ich glaube, ich habe es gemäß dem Dokument geschrieben. Das Ergebnis der Sorge um mehrere Stunden war, dass ich das Angebot nicht nur an einer Stelle geschlossen habe. Ich habe auch gelernt, dass Singles nicht gut sind und dass sie Doppel sein müssen.
Wie auch immer, es fing endlich an, nach der eingestellten japanischen Schriftart zu suchen ... aber ** ich kann sie nicht finden **. Erstens hat der Befehl ** fc-list nichts zurückgegeben **.
Nun, als ich die Schriftartdatei unter / usr / share / fonts verschoben habe, wurde sie gelöst und die verstümmelten Zeichen wurden behoben, aber dann verstehe ich die Bedeutung von pdf_font_path ** in ** conf.py nicht. Derzeit ist der Inhalt leer, aber er kann problemlos auf Japanisch angezeigt werden, und selbst wenn ich versuche, den Pfad eines anderen Ortes zu schreiben, wird er nicht wiedergegeben. Was ist, wenn ich es woanders hinstellen möchte? (Irgendwo die Einstellungen von ** Fontconfig ** umschreiben?)
hopstepjump.py
#! /usr/bin/env python
# *-*coding:utf-8*-*
import sys,re,urllib2
from BeautifulSoup import BeautifulSoup
#### reference page ####
base_url = 'http://kaigoouen.net'
hopstepjump = {
'hop':{
'index':2,
'last_page':25,
},
'step':{
'index':3,
'last_page':39,
},
'jump':{
'index':4,
'last_page':46,
},
}
#### for make .rst files ####
br = u'\n'
page_break = u".. raw:: pdf%s PageBreak" % (br*2)
def soup_to_sphinx(pg):
p = 1
while p <= pg['last_page']:
url = base_url + '/program/gymnastics/gymnastics_{index}_{page}.html'.format(index=pg['index'],page=p)
htmldata = urllib2.urlopen(url)
soup = BeautifulSoup( unicode(htmldata.read(),'utf-8') )
for box in soup.findAll('div',{'class':'box02'}):
lessons = box.find('div',{'class':'box02_txt_%s' % choice})
if lessons is not None:
title = box.contents[1].contents[0]['alt']
print( sphinx_head(title) )
images = lessons.findAll('div',{'class':'%s_image' % choice})
texts = lessons.findAll('div',{'class':'%s_txt' % choice})
texts = iter(texts)
for image in images:
src = base_url + image.contents[0]['src']
image = sphinx_image(src)
text = texts.next().renderContents()
text = sphinx_text(text)
print( sphinx_listtable(image,text) )
print(page_break)
htmldata.close()
p += 1
def sphinx_head(txt):
return br.join([br,txt,u"="*30+br]).encode('utf-8')
def sphinx_listtable(s_img,s_txt):
table = u".. list-table::" + br
image = u" * - %s" % s_img
text = u" - | %s" % s_txt
return br.join([table,image,text,br]).encode('utf-8')
def sphinx_image(src):
option = u":width: 150pt"
return u".. image:: %s" % src + br + u" %s" % option
def sphinx_text(txt):
text = txt.decode('utf-8').replace(u"<br />",br)
if br in text:
texts = text.splitlines()
text = reduce(lambda x,y: x + br + u" | " + y,texts)
return text
if __name__ == '__main__':
try:
choice = sys.argv[1]
page = hopstepjump[choice]
except IndexError:
print("[Error]: Option erforderlich ('hop'Oder'step'Oder'jump'のいずれOder)。")
exit(" -Beispiel:'python %s hop'" % sys.argv[0])
except KeyError:
print("[Error]: Die Optionen sind unterschiedlich ('hop'Oder'step'Oder'jump'のいずれOder)。")
exit(" -Beispiel:'python %s hop'" % sys.argv[0])
soup_to_sphinx(page)
python hopstepjump.py hop > hop.rst
Es ist eine Freude, eine Datei mit mehr als 1000 Zeilen mit einem einzigen Befehl zu schreiben.
Wie auch immer, wenn Sie eine Konfiguration damit vornehmen, müssen Sie nur `make html
oder
`make pdf``` erstellen.
GitHub
https://github.com/juniskw/hopstepjump/tree/no_replace_listtable
Übrigens ist ein Ausländer, den ich nicht kenne, autorisiert. Ist das etwas Schelmisches?
Recommended Posts