0

私がやろうとしていることの概要を説明するためのまともなタイトルを本当に考えることはできませんでしたが、私が持っている例はそれをうまく説明する必要があります、私の会社はオンラインでスケジュールを提供していますが、APIなどはありませんそれを抽出するために、PythonフレームワークScrapyを使用してデータをスクレイピングし、それをGoogleカレンダーに追加しています

何日もお尻を蹴っていて気分が良かったので、女の子がデータを処理するために正規表現の行をくれましたが、それ以来、分割シフトを処理できないことに気付きました(おそらく私はそのようにスケジュールされていなかったためです)彼女は1つの可能性を見ていませんでした)

私の正規表現は

re.findall("""dow1'>(\w+)<\S+?>(\w+ \d+)</td>\s*<td class.*?tlHours'>(\d+).*?span>\s*(\d+)<span.*?ment'>(.*?)</spa.*?Meal: (.*?)</sp.*?start'>(\S+?)</spa.*?end'>(\S+?)<""", response.body)

データ例:

これは通常の8時間労働で、食事の休憩があり、問題なく処理されます。

<tr>
    <td class='dt'>
        <span class='dow1'>Sunday</span>Dec 09
    </td>
    <td class='ScheduledDetails'valign='top'>
        <div style="position:relative;">
            <span class='tlHours'>8<span class='spart'> hrs</span> 0<span class='spart'> mins</span></span><span class='department'>Cashier</span><span class='meal'>Meal: 2pm - 3pm</span>
        </div>
    </td>
    <td>
        &nbsp;
    </td>
    <td class='Schedunderlay'>
        <div class='Sched'>
            <div class='schedbar' style='left: 143px; width: 234px;'>
                <div class='schedbar_l'></div>
                <div class='schedbar_m' style='width: 226px;'>
                    <span class='start'>10am</span><span class='end'>7pm</span>
                </div>
                <div class='schedbar_r'></div>
            </div>
            <div class='availbar' style='left: 9px; width: 498px; display: none;'>
                <div class='schedbar_l'></div>
                <div class='schedbar_m' style='width: 490px;'>
                    <span class='start'><img src='/Images/Schedule/arrowLeft.gif' alt='' style='margin-left:5px; margin-top:2px;' /></span>
                    <div class='OTtext' align='center'>All Day</div>
                    <span class='end'></span>
                </div>
                <div class='schedbar_r'></div>
            </div>
            <div class='availbar' style='left: 508px; width: 216px; display: none;'>
                <div class='schedbar_l_on'></div>
                <div class='schedbar_m_on' style='width: 208px;'><span class='start'></span>
                    <div class='OTtext' align='center'>All Day</div>
                    <span class='end'><img src='/Images/Schedule/arrowRight.gif' alt='' style='margin-left:5px; margin-top:2px;' /></span>
                </div>
                <div class='schedbar_r_on'></div>
            </div>
        </div>
    </td>
    <td>&nbsp;</td>
    <td class='rightColDetails'>
        <div class='AvailDetails' align='left' style='display: table-cell;'>
            <span class='iefix'><b>Avail - All Day</b></span><br/>
            <span style='font-size: 11px;'>Pref - All Day</span>
        </div>
    </td>
</tr>

そして、これはスプリットシフトであり、空の1時間スロットで区切られた2つの4時間シフトです(スコアリングシステムをだますためにこれを行います。1つではなく2つのカバーされたシフトです)。

<tr>
    <td class='dt'>
        <span class='dow1'>Thursday</span>Dec 13
    </td>
    <td class='ScheduledDetails' valign='top'>
        <div style="position:relative;">
            <span class='tlHours'>8<span class='spart'> hrs</span> 0<span class='spart'> mins</span></span><span class='department'>Cashier</span><span class='meal'>Meal: None</span>
        </div>
    </td>
    <td>&nbsp;</td>
    <td class='Schedunderlay'>
        <div class='Sched'>
            <div class='schedbar' style='left: 247px; width: 104px;'>
                <div class='schedbar_l'></div>
                <div class='schedbar_m' style='width: 96px;'>
                    <span class='start'>2pm</span><span class='end'>6pm</span>
                </div><div class='schedbar_r'></div>
            </div>
            <div class='schedbar' style='left: 377px; width: 104px;'>
                <div class='schedbar_l'></div>
                <div class='schedbar_m' style='width: 96px;'>
                    <span class='start'>7pm</span> <span class='end'>11pm</span>
                </div>
                <div class='schedbar_r'></div>
            </div>
            <div class='availbar' style='left: 9px; width: 498px; display: none;'>
                <div class='schedbar_l'></div><div class='schedbar_m' style='width: 490px;'>
                    <span class='start'><img src='/Images/Schedule/arrowLeft.gif' alt='' style='margin-left:5px; margin-top:2px;' /></span>
                    <div class='OTtext' align='center'>All Day</div>
                    <span class='end'></span>
                </div>
                <div class='schedbar_r'></div>
            </div>
            <div class='availbar' style='left: 508px; width: 216px; display: none;'>
                <div class='schedbar_l_on'></div>
                <div class='schedbar_m_on' style='width: 208px;'>
                    <span class='start'></span>
                    <div class='OTtext' align='center'>All Day</div>
                    <span class='end'><img src='/Images/Schedule/arrowRight.gif' alt='' style='margin-left:5px; margin-top:2px;' /></span>
                </div>
            <div class='schedbar_r_on'></div>
        </div>
    </div>
    </td>
    <td>&nbsp;</td>
    <td class='rightColDetails'>
        <div class='AvailDetails' align='left' style='display: table-cell;'>
            <span class='iefix'><b>Avail - All Day</b></span><br/><span style='font-size: 11px;'>Pref - All Day</span>
        </div>
    </td>
</tr>

重要な違いは、通常のシフトには開始時間と終了時間が1つあり、分割シフトには開始と終了、開始と終了があります。

私はこれに対して約5時間頭を叩き続けています...そして前進していません、私が正規表現を理解していればもっと幸運があると思います..どんな助けでも大いに感謝されます...

4

1 に答える 1

1

これは、BeautifulSoupを使用してドキュメントを解析し、情報を取得するためのソリューションです。

from bs4 import BeautifulSoup
soup = BeautifulSoup(html)

for schedbar in soup.find_all('div', 'schedbar'):
  print "start: " +  schedbar.find('div', 'schedbar_m').find('span', 'start').string
  print "end: " +  schedbar.find('div', 'schedbar_m').find('span', 'end').string

出力:

start: 2pm
end: 6pm
start: 7pm
end: 11pm
于 2012-12-13T16:26:11.410 に答える