Python 使用BeautifulSoup解析html源文件中的特定信息并将其保存到.csv文件

Python 使用BeautifulSoup解析html源文件中的特定信息并将其保存到.csv文件,python,parsing,csv,html-parsing,lxml,Python,Parsing,Csv,Html Parsing,Lxml,我试图做的是从HTML源文件中提取/解析订单信息,并将其保存在.csv文件中 我需要从html源代码中获得以下所有内容: 1.订单号(例如:99), 2.姓名(例如:Peter Haans)和 3.订单金额(例如:41,94欧元) 因为我是Python新手(一般来说也是编程新手),所以我很难正确解析信息并保存它 目前我正在使用以下代码: from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc) orderField = soup

我试图做的是从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,使其只显示我需要的信息?

有人提供了一个非常好的答案,通过修改生成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
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,使其只显示我需要的信息?

首先,你说你很难让它正常工作,然后你说你在寻找如何优化它的建议:是哪一个?我很抱歉。我需要帮助让它工作。