سؤال

أحاول أن أشتري صفوف أكثر من 1200 ملف من ملفات. على جهاز الكمبيوتر الخاص بي هم هنا ملف: ///home/phi/data/nhl/pl07-08/pl020001.htm '. ملفات .htm هذه متتابعة من * 20001.htm حتى * 21230.htm. خطتي هي في نهاية المطاف إرم بياناتي في MySQL أو SQLITE عبر تطبيق جدول بيانات أو مباشرة إذا كان بإمكاني الحصول على ملف .csv نظيف من هذه العملية.

هذه هي محاولتي الأولى في التعليمات البرمجية (بيثون)، تجرها، وأنا مثبت للتو Ubuntu 9.04 على بلدي بنتيوم بنتيوم الرابع. وغني عن القول أنني newb ولدي بعض حواجز الطرق.

كيف يمكنني الحصول على ميكانيكي للذهاب إلى جميع الملفات في الدليل بالترتيب. يمكن لآلية حتى القيام بذلك؟ هل يمكن لآلية / بيثون / جميلة قراءة عنوان URL "الملف: ///" أو هل هناك طريقة أخرى لإشارةه إلى /home/phi/data/nhl/pl07-08/pl020001.htm؟ هل هو ذكيا للقيام بذلك في 100 أو 250 زيادات أو فقط أرسل كل 1230؟

أنا فقط بحاجة إلى صفوف تبدأ بهذا "<tr class="evenColor">"ونهاية مع هذا"</tr>". من الناحية المثالية، أريد فقط الصفوف التي تحتوي على" لقطة "|" ملكة جمال "|" الهدف "داخلها ولكن أريد الصف كله (كل عمود). لاحظ أن"المرمى"في جريئة، هل يجب علي تحديد هذا؟ هناك 3 طاولات لكل ملف HTM.

كما أود اسم الملف الأصل (pl020001.htm) ليتم تضمينها في الصفوف التي أخرجها حتى أتمكن من معرفها في عمودها في قاعدة البيانات النهائية. وبعد أنا لا أعرف حتى مكان البدء في ذلك. هذا ما لدي حتى الآن:

#/usr/bin/python
from BeautifulSoup import BeautifulSoup
import re
from mechanize import Browser

mech = Browser()
url = "file:///home/phi/Data/NHL/pl07-08/PL020001.HTM"
##but how do I do multiple urls/files? PL02*.HTM?
page = mech.open(url)

html = page.read()
soup = BeautifulSoup(html)
##this confuses me and seems redundant
pl = open("input_file.html","r")
chances = open("chancesforsql.csv,"w")

table = soup.find("table", border=0)
for row in table.findAll 'tr class="evenColor"'
#should I do this instead of before?
outfile = open("shooting.csv", "w")

##how do I end it?

يجب أن أستخدم الخمول أو شيء من هذا القبيل؟ فقط محطة في أوبونتو 9.04؟

هل كانت مفيدة؟

المحلول

لن تحتاج إلى ميكانيكية. نظرا لأنني لا أعرف بالضبط محتوى HTML، فسأحاول أن أرى المباريات الأولية أولا. مثله:

import glob
from BeautifulSoup import BeautifulSoup

for filename in glob.glob('/home/phi/Data/*.htm'):
    soup = BeautifulSoup(open(filename, "r").read()) # assuming some HTML
    for a_tr in soup.findAll("tr", attrs={ "class" : "evenColor" }):
        print a_tr

ثم اختر الأشياء التي تريدها وكتابتها إلى Stdout مع الفواصل (وإعادة توجيهها> إلى ملف). أو اكتب CSV عبر بيثون.

نصائح أخرى

إجابة Myyn تبدو وكأنها بداية رائعة بالنسبة لي. شيء واحد أشر إليه أن أكون حظا حظا هو:

import glob
    for file_name in glob.glob('/home/phi/Data/*.htm'):
        #read the file and then parse with BeautifulSoup

لقد وجدت كل من os و glob الواردات لتكون مفيدة حقا لتشغيل الملفات في الدليل.

أيضا، بمجرد أن تستخدم a لحلقة بهذه الطريقة، لديك file_name ما يمكنك تعديله للاستخدام في ملف الإخراج، بحيث ستطابق أسماء ملفات الإخراج عن أسماء ملفات الإدخال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top