我想知道是否已经有类似scrapely的库可用。
https://github.com/scrapy/scrapely
它所做的就是给出一个示例WHat,然后给出想要从该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“。
我知道,我可以写一个简单的正则表达式规则,然后完成这个..但是,有没有库可以解决基于实例的学习问题呢?
也就是说,而不是指定一个正则表达式规则,然后通过它传递数据。
相反,我指定了一个实例和我想要提取的内容,它会自动构建规则?
希望我说得有道理。
发布于 2013-10-22 08:22:28
如果你喜欢抓取,你可以使用它。首先,将文本转换为类似html的内容,例如,将文本中的所有相关标记替换为<br>。然后执行Scrapely train方法中的操作,除了从远程位置获取html之外。
如果运行良好,scrapely的家伙可能会喜欢你在Github上的拉取请求。
发布于 2017-11-10 14:37:10
因为您已经删除了实际问题所针对的帖子:在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) https://stackoverflow.com/questions/17055642
复制相似问题