【问题标题】:Python - multiple HTML page parsing to a single TXT filePython - 将多个 HTML 页面解析为单个 TXT 文件
【发布时间】:2011-06-11 20:09:50
【问题描述】:

我正在尝试将 X 个 HTML 文件中的特定内容解析为单个 TXT 文件。

我对以下内容进行了肮脏的编码:

#!/usr/bin/python
import sys, mechanize, BeautifulSoup

def parsedata():
    ##do stuff
    prvitekst = soup.find(text='Random Number')
    prvikesh = prvitekst.findNextSiblings('td')
    drugitekst = soup.find(text='Random Month/Yeare')
    drugikesh = drugitekst.findNextSiblings('td')
    trechitekst = soup.find(text='Small Random Number')
    trechikesh = trechitekst.findNextSiblings('td')

    content = prvikesh + ";" + drugikesh + ";" + trechikesh + ";"
    writeFile(content);

def readFile(id):
    fi = open('result/page-%s.html' % id, 'r');

def writeFile(content):
    f = open('parsed.txt', 'a')
    f.write(content,"\n")
    f.close();

def main(start): 
    ##initialize vars
    id = int(start)
    page = readFile(id)
    soup = BeautifulSoup(page)
    print soup.prettify()
    readFile(id)
    for id in range(1000000000):
        parsedata()
        id = id + 1
        continue
    main(sys.argv[1]);

虽然我试图抓取的 HTML 部分看起来像这样

<tr style="height:40px; background-color:#f0f0f0;"><td colspan="4" class="textLargeBold" style="border-bottom: solid 1px #c4c4c4;">Random Details</td></tr>
<tr class="text">
<td align="left" valign="top"><b>Type</b></td>
<td align="left" valign="top">Color</td>
<td align="left" valign="top"><b>Random Number</b></td>
<td align="left" valign="top">213523123123123</td>
</tr>
<tr class="text"
<td align="left" valign="top"><b>Random Month/Year</b></td>
<td align="left" valign="top">12/13</td>
<td align="left" valign="top"><b>Small Random Number</b></td>
<td align="left" valign="top">13233</td>
</tr>

我想要第一个之后的细节。因此,如果我正在搜索 Typem,我希望它显示颜色。

当然最后我希望得到的内容以类似于 CSV 的格式进行解析。

类型;随机数;随机月/年

它应该解析

Color;213523123123123;12/13

当然,在我编写的代码中,我不是在搜索类型,但这很容易改变。

编辑:固定意图

【问题讨论】:

  • 请修正您的代码缩进。
  • 这种任务(查找一些文本,然后从该点开始查找另一个文本)很容易在 xpath 中定义://td/b[text()="Type"]/../following-sibling::td[1]/text()

标签: python csv html-parsing beautifulsoup


【解决方案1】:
html='''
<tr style="height:40px; background-color:#f0f0f0;"><td colspan="4" class="textLargeBold"  style="border-bottom: solid 1px #c4c4c4;">Random Details</td></tr> <tr class="text"> <td align="left" valign="top"><b>Type</b></td> <td align="left" valign="top">Color</td> <td align="left" valign="top"><b>Random Number</b></td> <td align="left" valign="top">213523123123123</td> </tr> <tr class="text" <td align="left" valign="top"><b>Random Month/Year</b></td> <td align="left" valign="top">12/13</td> <td align="left" valign="top"><b>Small Random Number</b></td> <td align="left" valign="top">13233</td> </tr> 
'''

import htql; 
a=[x for x in htql.HTQL(html, "<b sep>2-0 {name=<b>:tx; value=<td>1:tx } ")];
a

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2018-11-05
    • 2013-04-16
    • 1970-01-01
    • 2017-04-08
    • 2016-10-29
    相关资源
    最近更新 更多