您好,我正在建立一个关于我的图书收藏的事实数据数据库,即标题、页数、宽度、长度、作者、作者出生日期、出版商名称、出版商地址等。为此,我输入 ISBN,然后应用程序从 Web 获取该信息。从我自己定义的几个站点中,我知道其中将包含我需要的所有信息。目前,它是 3 个站点,而且很可能永远不会超过 5 个。在每个网站上,我使用 isbn 作为查询参数 CURL 一个搜索页面,提取搜索页面显示的链接,然后 CURL 这些链接并从中提取上述信息(出生、标题、出版商等)他们。因此,我的抓取范围是 3 x(搜索页面 + 信息页面)= 6 个 HTML 页面。
这些页面都以荒谬的方式呈现相关信息。例如,发布者信息在一个 HTML 标记中包含地址、电话、电子邮件、网站,以 brs 作为分隔符。一些出版商没有这些字段之一,因此它甚至不总是相同数量的 brs。这些站点中的另一个站点包含大部分信息的 lis,但一个字段为 a,另一个字段为 p,另一个字段为 div。ETC...
我已经成功地使用正则表达式提取了我想要的内容,然后使用了 DOM 解析器。最后,使用 DOM 解析器的代码的可读性更差,因为提取信息字段需要更多操作。举个例子:
<li>Né le : 23/12/1990 (ANGLETERRE)</li>
对于男性作者的生日,对于女性作者也可以显示为
<li>Née le : 11/07/1832</li>
使用 DOM 解析器,我需要获取一个 lis 列表,这还不够,因为一些重要信息在 ap、一个 div 和一个 a 中。然后对于每个 li,我需要检查 li 是否包含“Né le”或“Née le”,它是 ifs 或正则表达式 - 检查是否有带括号的出生地,并提取它,它位于至少还有两个操作。使用正则表达式,我可以在一行代码中得到它。
此外,解析器究竟是如何构建的?底层代码是做正则表达式,还是别的什么?如果是这样,我认为在使用解析引擎时,与快速而肮脏的正则表达式相比,性能成本会很高吗?
所以这是我的两个询问,DOM 解析器是如何构建的,它是否带有底层的正则表达式?其次,对于我解析六到十页的非常有限的范围,主要供我个人使用,我不应该追求代码的可读性(和性能取决于第一个问题)吗?
最好的问候,塞巴斯蒂安