python中基于实例的正则表达式



我想知道是否已经有一个库可以做类似于scrapely的事情

https://github.com/scrapy/scrapely

它的作用是你给出一个示例url,然后你给出你想从这个html中提取的数据…

url1 = 'http://pypi.python.org/pypi/w3lib/1.1'
data = {'name': 'w3lib 1.1', 'author': 'Scrapy project', 'description': 'Library of web-related functions'}

,然后通过简单的

来启动这个规则
s.train(url1, data)

现在,我可以从不同的url中提取相同的数据…

但是有没有库可以做同样的事情,但是对于原始文本…

例如:

raw_text = "|foo|bar,name = how cool"

然后我想从中提取"bar"

我知道,我可以写一个简单的正则表达式规则,并完成这个…但是是否有任何可用的库可以解决这个基于实例的学习问题…

。E而不是指定一个正则表达式规则,然后通过它传递数据…

我指定一个实例和我想要提取的内容,它会自动构建规则?

希望我说的有意义。

如果你喜欢,你可以使用它。首先,将文本转换为类似html的内容,例如将文本中的所有相关标记替换为<br>。然后做Scrapely train方法中所做的事情,除了从远程位置获取html。

如果效果很好,scrapely家伙可能会喜欢你在Github上的pull request。

试图在雷达下飞行这个答案,因为你已经删除了实际问题的帖子:在python中创建一个嵌套字典/json

嗯,我解决了这个问题,在我的Python上工作,这就是我想到的。

import re
from itertools import chain
d = {'foo': ['a', 'b'], 'foo::bar':['c'], 'foo::bar::baz':['z'], 'foo::baz':['f'], 'bar' :['d'], 
'bar::baz': ['d', 'a'], 'boom':[], 'boom::bam::boombam' : ['foo']}
dic = {}
hiers = {}
for k,v in d.items():
    if '::' not in k:
        if not v:
            dic[k] = {'inner_tag':{}}
        else:
            dic[k] = {'sources':v, 'inner_tag':{}}
    if '::' in k:
        hiers[k] =v
it = iter(hiers)
i = next(it)
def reg(i):
    return[m.start() for m in re.finditer('::',i)]
for k,v in dic.items():     
    while True:
        try:            
            nxt = next(it)      
            it = chain([nxt], it)               
            curr_len = len(reg(i))
            nxt_len = len(reg(nxt))
        except StopIteration:
            v['inner_tag'][i] = {'sources':hiers[i]}
            break
        if curr_len <= nxt_len and i[:2] == nxt[:2]:
            v['inner_tag'][i] = {'sources':hiers[i], 'inner_tag':{}}    
            last = i
            i = next(it)    
        elif i[:2] != nxt[:2]:
            v['inner_tag'][i] = {'sources':hiers[i]}
            last = i
            i = next(it)
            break
        else:
            v['inner_tag'][last]['inner_tag'][i] = hiers[i]
            last = i
            i = next(it)            
            continue                                
print(dic) 

最新更新