0

我要做的是从 HTML 源文件中提取/解析订单信息并将其保存在 .csv 文件中。

我需要的 html 源代码是:1. 订单号(例如:99),2. 名称(例如:Peter Haans)和 3. 订单金额(例如:41,94 欧元)。

因为我是 Python 新手(和一般编程),所以我很难正确解析信息并保存它。

目前我正在使用这段代码:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_doc)

orderField = soup.tbody.tr.next_sibling.next_sibling
orderNumber = soup.tbody.tr.next_sibling.next_sibling.contents[3]
customerName = soup.tbody.tr.next_sibling.next_sibling.contents[5]
totalAmount = soup.tbody.tr.next_sibling.next_sibling.contents[9]

print orderField
print orderNumber
print customerName
print totalAmount

您可以在此处查看完整的 html 代码(Dropbox 链接)。

这是我正在使用的 HTML 代码的一部分:

<tbody>
<tr class="filter">
<td></td>
<td align="right"><input type="text" name="filter_order_id" value="" size="4" style="text-align: right;"></td>
<td><input type="text" name="filter_customer" value="" class="ui-autocomplete-input" autocomplete="off" role="textbox" aria-autocomplete="list" aria-haspopup="true"></td>
<td><select name="filter_order_status_id">
<option value="*"></option>
<option value="0">Afgebroken bestellingen</option>
<option value="23">Bestelling geannuleerd</option>
<option value="17">Bestelling ontvangen</option>
<option value="24">Bestelling verzonden</option>
<option value="22">Betaling mislukt</option>
<option value="20">Betaling ontvangen via Bank</option>
<option value="19">Betaling ontvangen via PayPal</option>
<option value="21">Betaling via Bank mislukt</option>
<option value="18">Betaling via PayPal mislukt</option>
<option value="25">Gereed voor afhalen (Delft)</option>
<option value="26">Wachten op betaling</option>
</select></td>
<td align="right"><input type="text" name="filter_total" value="" size="4" style="text-align: right;"></td>
<td><input type="text" name="filter_date_added" value="" size="12" class="date hasDatepicker" id="dp1372950239097"></td>
<td><input type="text" name="filter_date_modified" value="" size="12" class="date hasDatepicker" id="dp1372950239098"></td>
<td align="right"><a onclick="filter();" class="button">Filter</a></td>
</tr>
<tr>
<td style="text-align: center;"> <input type="checkbox" name="selected[]" value="99">
</td>
<td class="right">99</td>
<td class="left">Peter Haans</td>
<td class="left">Betaling ontvangen via Bank</td>
<td class="right">€ 41,94</td>
<td class="left">03-07-2013</td>
<td class="left">03-07-2013</td>
<td class="right"> [ <a href="http://www.fonexshop.nl/admin/index.php?route=sale/order/info&amp;token=470a3c2fa62a4cc029825bd6010520bb&amp;order_id=99">Bekijk</a> ]
[ <a href="http://www.fonexshop.nl/admin/index.php?route=sale/order/update&amp;token=470a3c2fa62a4cc029825bd6010520bb&amp;order_id=99">Wijzigen</a> ]
</td>
</tr>
<tr>
<td style="text-align: center;"> <input type="checkbox" name="selected[]" value="98">
</td>
<td class="right">98</td>
<td class="left">Peter Haans</td>
<td class="left">Bestelling geannuleerd</td>
<td class="right">€ 41,94</td>
<td class="left">03-07-2013</td>
<td class="left">03-07-2013</td>
<td class="right"> [ <a href="http://www.fonexshop.nl/admin/index.php?route=sale/order/info&amp;token=470a3c2fa62a4cc029825bd6010520bb&amp;order_id=98">Bekijk</a> ]
[ <a href="http://www.fonexshop.nl/admin/index.php?route=sale/order/update&amp;token=470a3c2fa62a4cc029825bd6010520bb&amp;order_id=98">Wijzigen</a> ]
</td>
</tr>
<tr>
<td style="text-align: center;"> <input type="checkbox" name="selected[]" value="96">
</td>
<td class="right">96</td>
<td class="left">Akam Rezakhani</td>
<td class="left">Bestelling verzonden</td>
<td class="right">€ 41,94</td>
<td class="left">01-07-2013</td>
<td class="left">02-07-2013</td>
<td class="right"> [ <a href="http://www.fonexshop.nl/admin/index.php?route=sale/order/info&amp;token=470a3c2fa62a4cc029825bd6010520bb&amp;order_id=96">Bekijk</a> ]
[ <a href="http://www.fonexshop.nl/admin/index.php?route=sale/order/update&amp;token=470a3c2fa62a4cc029825bd6010520bb&amp;order_id=96">Wijzigen</a> ]
</td>
</tr>

关于如何使其正常工作的任何想法?

谢谢。

编辑:

有人提供了一个很好的答案,通过修改生成html页面的模板帮我解决。

他建议添加额外的类名,如 orderId、customerName 和 orderAmount。

但由于某种原因,他删除了他的答案。我要感谢他,因为它让我更近了一步。

我得到了所有订单 ID、客户名称和订单金额的三个原始列表(带有 html 代码)。

这是代码:

from bs4 import BeautifulSoup
import lxml

html_doc = open('bestellingen.html', 'r')
soup = BeautifulSoup(html_doc,'lxml')

orderId = soup.select('.orderId')
customerName = soup.select('.customerName')
orderAmount = soup.select('.orderAmount')

print orderId
print customerName
print orderAmount

有没有办法过滤原始 html,所以它只显示我需要的信息?

4

1 回答 1

0

有人提供了一个很好的答案,通过修改生成html页面的模板帮我解决。

他建议添加额外的类名,如 orderId、customerName 和 orderAmount。

我要感谢他,因为它让我更近了一步。

我得到了所有订单 ID、客户名称和订单金额的三个原始列表(带有 html 代码)。

这是代码:

from bs4 import BeautifulSoup
import lxml

html_doc = open('bestellingen.html', 'r')
soup = BeautifulSoup(html_doc,'lxml')

orderId = soup.select('.orderId')
customerName = soup.select('.customerName')
orderAmount = soup.select('.orderAmount')

print orderId
print customerName
print orderAmount

有没有办法过滤原始 html,所以它只显示我需要的信息?

于 2013-07-04T20:41:09.357 回答