从selenium递归解析.text输出到Django模型

时间:2018-06-13 06:10:44

标签: python selenium parsing

我能够使用selenium python捕获我需要的数据,但我想知道如何递归地通过几乎一致的结构化文本来创建新对象。为了达到目的,selenium将其输出到.txt文件。名称已被更改以保护无辜者。

  (001) DOLE, BOB & ELIZABETH - 1345641
17.23 92.55 22.05 07/24/2007
   (002) FRANKLIN, BENJAMIN - 4005648
88.38 1102.83 1118.32 11/02/2008
(002) CLINTON, WILLIAM & HILLARY - 768568
0.00 288.23 56.00 01/01/1989
    (005) JEFFERSON, THOMAS & MARTHA - 5487784
9230.02 23813.11 555.23 01/04/1780

几百行,在(00#)之前的0到4个空格。目标是通过django orm获取每个并使用属性创建一个新对象。大概如果我可以将每两行分组,那么我就可以运行一个for循环。我不需要括号中的数字,所以空格无关紧要,我只需要在(###)之后查找姓氏以开始一个空格。

有关如何贯穿这些的任何建议?每对线的理想结果如下:

entry = Politician.create(
    id = 1345641,
    last_name = 'Dole',
    first_name = 'Bob',
    secondary_first_name = 'Elizabeth',
    amount_one = 17.23,
    amount_two = 92.55,
    amount_three = 22.05,
    favorite_date = parse(07/24/2007)
entry.save()

1 个答案:

答案 0 :(得分:1)

正如你所建议我一次读两行:

import itertools

with open(fn) as f:
    for two_lines in itertools.zip_longest(f, f, fillvalue=''):
        print(' '.join(two_lines))

输出:

  (001) DOLE, BOB & ELIZABETH - 1345641 17.23 92.55 22.05 07/24/2007
   (002) FRANKLIN, BENJAMIN - 4005648 88.38 1102.83 1118.32 11/02/2008
(002) CLINTON, WILLIAM & HILLARY - 768568 0.00 288.23 56.00 01/01/1989
    (005) JEFFERSON, THOMAS & MARTHA - 5487784 9230.02 23813.11 555.23 01/04/1780

然后正则表达我的方式...

编辑: 实际上我认为正则表达式甚至不是必需的。

仅仅分割数据就足够了

line = ' '.join(two_lines)
line = line.strip()[5:] # remove whitespace and (001)
name, numbers = line.split('-')
id, amount_one, amount_two, amount_three, favorite_date = numbers.split()