سؤال تحليل HTML متعددة إلى نص وإعادة تسميته كدليل رئيسي


في دليل هناك العديد من المجلدات .html بالداخل ، أود أن يتم تحليل كل HTML كملف .txt جديد باسم الدليل الأصلي.

مثال 1/ index.html و> Example1.txt

Example2 / index.html و> Example2.txt


3
2018-05-09 06:45


الأصل


كيف تريد إزالة العلامات؟ - suspectus
شيء من هذا القبيل يعمل مع الملفات الفردية باستخدام sed ، ملف القط | sed 's / <b>. * </ b> // g' - z4nb0t
@ z4nb0t مقبول بشكل عام أن استخدام regex لتحليل HTML سيؤدي إلى إله الآلهة قبل بداية الوقت الصحوة من سباتهم الأبدي لاستهلاك جهاز الكمبيوتر الخاص بك والبشرية جمعاء. - evilsoup
evilsoup: هاها ، هذا عظيم. - mpy


الأجوبة:


من الواضح أنك تريد تحويل بعض صفحات HTML إلى نص عادي. لذلك ، لن أحذف العلامات باستخدام حل مخصص مدمج (على سبيل المثال مع بعض السحر السحري) ، ولكن استخدم أداة مصممة لهذا الغرض مثل html2text. من صفحتها على الويب:

html2text عبارة عن نص برمجي Python يحول صفحة HTML إلى نظيفة ،   نص عادي سهل القراءة ASCII. الأفضل من ذلك ، أن ASCII يحدث أيضا   أن يكون تسجيلاً صحيحًا (تنسيق نصي إلى تنسيق HTML).

لمعالجة سؤالك عن إعادة تسمية الدُفعة:

find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' dirname
 do python path/to/html2text/html2text.py "${dirname}/index.html" > "${dirname}/${dirname}.txt"
done

هنا يقوم الأمر find بإدراج جميع الدلائل الموجودة فقط في الدليل الحالي (أي ليس متكرراً) ويقوم أمر القراءة (في حين الشرط) بتعيين القيم للمتغير $dirname. وأخيرا ، الأمر (ق) بين do و done الحصول على (ق) تنفيذها ، ومن هنا تقوم بتحويل الملفات وفقا لطلبك. كما هو موضح فيslhck ، يجب أن تستخدم أمرًا معقدًا من هذا القبيل ، بحيث لا تنكسر أسماء الألقاب مع المسافات البيضاء أي شيء.

[تصحيح]: متغير آخر لتحويل جميع ملفات HTML تحت الدليل الحالي:

find . -iname "*.html" -print0 | while IFS= read -r -d '' filename
  do python path/to/html2text/html2text.py "${filename}" > "${filename%.*}.txt"
done

iname حالة البحث أناحساسة ل *.html.

${filename%.*}.txt يزيل التمديد ويلحق .txt، على سبيل المثال filename هو some/path/index.html، ${filename%.*} هو some/path/index و اخيرا ${filename%.*}.txt هو some/path/index.txt.


عند استخدام ض قذيفة، يمكنك استخدام منظف كثير للحلقة ، دون الكبح في المساحات البيضاء:

for i (*(/)) python path/to/html2text/html2text.py "${i}/index.html" > "${i}/${i}.txt"

الخدعة هنا هي ذلك *(/) هل جيل اسم الملف ، ولكن فقط إرجاع الدلائل (/).

[تصحيح]: أيضا في صيغة zsh متغير لتحويل جميع ملفات HTML تحت الدليل الحالي (تحتاج إلى الخيار EXTENDEDGLOB للتهيئة):

for i ((#i)**/*.html) {
   python path/to/html2text/html2text.py "$i" > "${i:r}.txt"
}

(#i) يستخدم القضية أناglobing nsensitive، ** البحث بشكل متكرر ، وبالتالي إرجاع جميع ملفات HTML تحت دليل العمل الحالي. (إذا كان يجب اتباع الارتباطات الرمزية ، استخدم ثلاث نجوم *** بدلا من اثنين).

إذا كان لديك أكثر من أمر داخل الحلقة for ، استخدم curly { ... }بين قوسين (غير ضروري هنا ، لكنهم لن يؤذوا).

${i:r} يزيل الامتداد (r للإزالة) من المتغير $i.


2
2018-05-09 07:33



@ z4nb0t: عذرا ، لقد نسيت إعادة التوجيه > في أول إصدار. الآن يجب أن تعمل كما هو مذكور. (كان الخطأ ، أن html2text يتوقع كمعلمة ثانية اختيارية ترميز صفحة HTML ، ولكن حصلت على اسم ملف txt). - mpy
أنا فقط لاحظت بعض المجلدات لديها ملفات HTML متعددة ، هل ستكون هذه مشكلة؟ - z4nb0t
@ z4nb0t: لا توجد مشكلة ، الأمر المعطى يفعل بالضبط ما طلبته ويأخذ index.html فقط في كل مجلد. من السهل استخدام حلقة ثانية للحلقة أيضًا على جميع ملفات html في dirs. ولكن عليك أن تحدد كيف يجب أن يتم إعادة التسمية بعد ذلك. - mpy
هذا الفواصل عند أسماء الملفات أو مسارات تحتوي على مسافة بيضاء. يجب عليك استخدام خيار exec للبحث أو توجيه الإخراج إلى حلقة في حين (ولكن فقط مع -print0 اختيار. نرى: mywiki.wooledge.org/ParsingLs - slhck
@ z4nb0t: zsh قوية جدا ، ولكن بالطبع تحتاج إلى بعض الوقت للتدريب. إذا كنت مهتما ، أنا أوصي حقا zsh.sourceforge.net/Guide/zshguide.pdf بيتر ستيفنسون ، المشرف الحالي على zsh. لا تخاف من حجمها ، IMHO من السهل قراءة (على الأقل الفصول الأولى ؛) - mpy