【发布时间】:2011-10-08 16:06:17
【问题描述】:
我是 python/django 的新手,我正在尝试从我的爬虫中获取更有效的信息。目前,scraper 获取漫画书标题列表,并正确地将它们分成三部分(出版日期、原始日期和标题)的 CSV 列表。然后我将当前日期和标题传递到我的数据库的不同部分,我在我的加载程序脚本中执行此操作(将 mm/dd/yy 转换为 yyyy-mm-dd,保存到“pub_date”列,标题转到“title”柱子)。
一个普通的字符串可以是这样的:
10/12/11|10/12/11|Stan Lee's Traveler #12 (10 Copy Incentive Cover)
我成功抓取了日期,但标题比较棘手。在这种情况下,理想情况下,我希望用第二个“|”之后的信息填充三个不同的列。标题应该转到“标题”,一个字符域。数字 12(在 '#' 之后)应该进入 DecimalField“issue_num”,而 '()' 之间的所有内容都应该进入“Special”字符域。我不确定如何进行这种严格的解析。
有时,有多个#(特别是一个漫画被描述为一个捆绑包,“包含问题#90-#95”)并且有几个有多个“()”组(例如,“地球的背叛” Of The Apes #1 (Of 4)(25 Copy Incentive Cover) )
什么是开始解决这个问题的好方法?对于更复杂的行,我对 If/else 语句的了解很快就崩溃了。我怎样才能有效地(如果可能的话)pythonic解析这些行并将它们细分,以便以后可以将它们插入数据库中的正确位置?
【问题讨论】:
-
你描述的不是严格的解析。您需要定义您的输出将是什么。例如,给定“包含问题 #90-#95”,
issue_num中应该包含什么内容?字符串“包含问题”是否应该出现在title中?多个“()”组呢? ......无论如何,这种临时的“智能解析”往往会陷入疯狂。寻找其他方式来获取信息,或为令人沮丧的经历做好准备。 -
对于“#90-#95”的一个实例,我打算给它一个空值作为问题编号,而不是给它一个卷号。对于多个组,第二组()总是包含我想要的部分,所以(理论上)我会考虑任何有两组括号的人,并要求它只查看第二组,删除(或至少不引用)其余部分。
标签: python django string parsing web