最近在写 python 爬虫抓取 OPAC 的图书列表,有一段 HTML 如下
<div class="bookmeta" bookrecno="166612">
<div>1 .
<span class="bookmetaTitle">
<a href="book/166612" target="_blank">
数学百科全书.第一卷 A-C
</a>
</span>
<a href="book/166612" target="_blank">
<img border="0" src="/opac/media/images/newwin.png">
</a>
</div>
<div>著者:
<a href="/opac/search?searchWay=author&q=%E3%80%8A%E6%95%B0%E5%AD%A6%E7%99%BE%E7%A7%91%E5%85%A8%E4%B9%A6%E3%80%8B%E7%BC%96%E8%AF%91%E5%A7%94%E5%91%98%E4%BC%9A%E7%BC%96%E8%AF%91" target="_blank">
《数学百科全书》编译委员会编译
</a>
</div>
<div>
出版社:
<a href="/opac/search?searchWay=publisher&q=%E7%A7%91%E5%AD%A6%E5%87%BA%E7%89%88%E7%A4%BE" target="_blank">
科学出版社
</a>
出版日期: 1994
</div>
<div>
文献类型:
<img src="/opac/booktypeicon/1" class="booktypeIcon">
图书,
索书号:
<span class="callnosSpan">O1-61/S661/:1 </span>
</div>
</div>
现在想要提取出内部的 书籍编号 (bookrecno)
书名
和 索书号
使用以下正则匹配,匹配到“索书号:”无问题
<div class=\"bookmeta\" bookrecno=\"(\d*?)\">.*?<a href=\"book/\d*?\" target=\"_blank\">\s*(.*?)\s*</a>.*?索书号:
但是想要继续匹配下面的 <
时,使用 \w*<
提示 “ Catastrophic backtracking 错误” 而 .*?<
却无任何问题。求解这个错误到底是什么?
附:
可以正常匹配的正则
<div class=\"bookmeta\" bookrecno=\"(\d*?)\">.*?<a href=\"book/\d*?\" target=\"_blank\">\s*(.*?)\s*</a>.*?索书号:.*?<span class=\"callnosSpan\">\s*(.*?)\s*</span>.*?</div>.*?</div>
提示错误的正则
<div class=\"bookmeta\" bookrecno=\"(\d*?)\">.*?<a href=\"book/\d*?\" target=\"_blank\">\s*(.*?)\s*</a>.*?索书号:\w*<span class=\"callnosSpan\">\s*(.*?)\s*</span>\w*</div>\w*</div>
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.