如何用python优雅地抓取数据?

2024-09-30 02:16:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有文本文件中的数据,我需要存储在数据库中,现在我有点困惑如何做它更容易。你知道吗

以下是我的数据示例:

a: text1
b: text2
c: text3
blah blah not necessary text
a: text4
b: text5
c: text6
etc

你能帮我分析一下这些数据吗。 我已经完成了下一个代码

import urllib2 as ur

def getPageData(url):
    return ur.urlopen(url).readlines()

checkList = ['a', 'b', 'c']

if __name__ == '__main__':
    textList = getPageData(url)
    res = []
    for i in textList:
        for y in checkList:
            if y in i:
                print i

我在底部创建了一个表,比如

id | a varchar | b varchar | c varchar |

我期待下一个结果

id | a varchar | b varchar | c varchar |
1  | text1     | text2     | text3     |
2  | text4     | text5     | text6     |
n  | text      | text      | text      |

如果逐行读取文本文件,我如何将文本划分为逻辑块,例如,我得到a、b、c用这些数据创建字典,然后当这个块结束时,我将字典附加到列表中,然后我将dict列表存储到base中。但是我有点搞不清楚如何用这本词典创建这个列表我需要检查什么,以及如何避免不必要的数据?有没有更优雅的方法?你知道吗


Tags: 数据textinurl列表blah文本文件varchar
2条回答

这个怎么样:

text = """a: text1
b: text2
c: text3
blah blah not necessary text
a: text4
b: text5
c: text6
etc."""

import re
from collections import defaultdict

d = defaultdict(list)
for line in textList:
    m = re.match(r"([^:]+):\s*(.*)", line)
    if m:
        d[m.group(1)].append(m.group(2))

然后你得到

>>> d
defaultdict(<type 'list'>, {'a': ['text1', 'text4'], 'c': ['text3', 'text6'], 
'b': ['text2', 'text5']})

正则表达式标识至少包含一个标识符(a)的行,然后是一个冒号,并将标识符和冒号(.*)后面的文本放入匹配的组中。然后,它将结果放入一个“默认字典”,在引入内容时创建它的内容。你知道吗

如果事先知道标识符,可以使用

m = re.match(r"(a|b|c|otherid|diff_id|etc)\s*:\s*(.*)", line)

相反。你知道吗

我将在:冒号上拆分,并测试第一部分是否在允许的前缀集中:

checkList = set(['a', 'b', 'c'])

for i in textList:
    check, rest = i.split(':', 1)
    if check.strip() not in checkList:
        continue
    data = rest.strip()
    # insert data into database; check is your column name.

相关问题 更多 >

    热门问题