0

<tr>のような sがあります。

<tr align=center><td>10876151</td><td><a href=userstatus?user_id=yangfanhit>yangfanhit</a></td><td><a href=problem?id=3155>3155</a></td><td><font color=blue>Accepted</font></td><td>344K</td><td>219MS</td><td>C++</td><td>3940B</td><td>2012-10-02 16:42:45</td></tr>
<tr align=center><td>10876150</td><td><a href=userstatus?user_id=BandBandRock>BandBandRock</a></td><td><a href=problem?id=2503>2503</a></td><td><font color=blue>Accepted</font></td><td>16348K</td><td>2750MS</td><td>G++</td><td>840B</td><td>2012-10-02 16:42:25</td></tr>

次のようなhtmlタグなしでコンテンツを取得したい:

yangfanhit
3155
Accepted
344K
219MS
C++
3940B
2012-10-02 16:42:45

今、私はそれに対処するために次のコードを使用しています:

response = urllib2.urlopen('http://poj.org/status', timeout=10)
html = response.read()
response.close()

pattern = re.compile(r'<tr align.*</tr>')
match = pattern.findall(html)
pat = re.compile(r'<td>.*?</td>')
p = re.compile(r'<[/]?.*?>')
for item in match:
    for i in pat.findall(item):
        print p.sub(r'', i)
    print '================================================='

私は正規表現が初めてで、Pythonも初めてです。それで、それを処理するためのより良い方法を提案できますか?


Explorer 9 での Mailto アクション - 空のメール

外部の顧客に送信する html フォームを持っているので、顧客は入力して返送することができます。問題は、フォームの送信ボタンをクリックしたときに発生します。

Outlook 2010 と Explorer 9 を使用する Windows 7 64 ビットでは、何らかの理由で mailto アクションが機能しません。空の Outlook メッセージが表示され、件名と受信者のみが追加されます。添付ファイルも本文もありません。デフォルトのブラウザーを FF に変更すると、必要なテキストが添付ファイル (postdata.att) として代わりに本文セクションに表示されます。HTMLフォームがOutlookから外部の顧客に送信されるため、サーバーコードを使用できないため、asp/php/cgiは私には関係ありません。外部の顧客は組織のイントラネットにアクセスできず、HTML フォームは電子メールの添付ファイルとして送信されるため、インターネット サーバーにもホストされていません。

誰にも解決策がありますか?

ありがとう、

4

4 に答える 4

1

PyQueryもご覧ください。jQueryに精通している場合は、非常に簡単に取得できます。これは、テーブルヘッダーとデータをディクショナリのリストとして返す例です。

import itertools
from pyquery import PyQuery as pq

# parse html
html = pq(url="http://poj.org/status")

# extract header values from table
header = [header.text for header in html(".a").find(".in").find("td")]

# extract data values from table rows in nested list
detail = [[td.text for td in tr] for tr in html(".a").children().not_(".in")]

# merge header and detail to create list of dictionaries
result = [dict(itertools.izip(header, values)) for values in detail]
于 2012-10-02T14:02:59.383 に答える
1

BeautifulSouphtmlを解析するために使用できます。テーブルの内容をcsv形式で書き込むには:

#!/usr/bin/env python
import csv
import sys
import urllib2
from bs4 import BeautifulSoup # $ pip install beautifulsoup4

soup = BeautifulSoup(urllib2.urlopen('http://poj.org/status'))

writer = csv.writer(sys.stdout)
for tr in soup.find('table', 'a')('tr'):
    writer.writerow([td.get_text() for td in tr('td')])

出力

Run ID,User,Problem,Result,Memory,Time,Language,Code Length,Submit Time
10876151,yangfanhit,3155,Accepted,344K,219MS,C++,3940B,2012-10-02 16:42:45
10876150,BandBandRock,2503,Accepted,16348K,2750MS,G++,840B,2012-10-02 16:42:25
于 2012-10-02T12:51:48.940 に答える
0

あなたがすでにあなたのために仕事をするHTML/XMLパーサーを手に入れているのに、なぜあなたはそれらのことをしているのですか?

BeautifulSoupを使用してください。上記の質問で述べたように、必要なことを考慮すると、2〜3行のコードで実行できます。

例:

>>> from bs4 import BeautifulSoup as bs
>>> html = """
<tr align=center><td>10876151</td><td><a href=userstatus?user_id=yangfanhit>yangfanhit</a></td><td><a href=problem?id=3155>3155</a></td><td><font color=blue>Accepted</font></td><td>344K</td><td>219MS</td><td>C++</td><td>3940B</td><td>2012-10-02 16:42:45</td></tr>
<tr align=center><td>10876150</td><td><a href=userstatus?user_id=BandBandRock>BandBandRock</a></td><td><a href=problem?id=2503>2503</a></td><td><font color=blue>Accepted</font></td><td>16348K</td><td>2750MS</td><td>G++</td><td>840B</td><td>2012-10-02 16:42:25</td></tr>
"""

>>>soup = bs(html)
>>>soup.td
>>><td>10876151</td>
于 2012-10-02T12:47:06.537 に答える
0

HTMLを解析するために正規表現を直接操作する必要はありません。回答はこちらを参照してください

または、HTML 処理については、 Dive into Python Chapter 8 を参照してください。

于 2012-10-02T12:37:40.393 に答える