gpt4 book ai didi

javascript - 正则表达式:如何从字符串中获取时间

转载 作者:行者123 更新时间:2023-12-03 12:33:49 26 4
gpt4 key购买 nike

我正在为 The List 开发一个抓取工具作为一个 JS 项目,我的 regex-fu 可能会比现在更好。

给定一个像这样的数据结构

<a name="may_21"><b>Wed May 21</b></a>
<ul>
<li><b><a href="by-club.0.html#Ace_of_Spades__Sacramento">Ace of Spades, Sacramento</a></b> <a href="by-band.0.html#Christina_Perri">Christina Perri</a>, <a href="by-band.0.html#Birdy">Birdy</a> a/a $20 7pm **
...
</ul>

我编写了以下内容来利用cheerio 来获取日期、地点和乐队列表:

request(url, (error, response, html)->
if(!error)
$ = cheerio.load(html)

concert = { bands : {}, location : {venue: "", address : ""}, date: {date: "", time: ""}}

calendar = {}

dates = []

#grab dates
$('body > ul > li > a').each(->
data = $(this)
$dates = data.children().first()
dates.push($dates.text())
)

#build concerts
for date in dates
$("a:contains('" + date + "')").siblings().each(->
$venue = $(this).children().find("b")
$bands = $venue.siblings("a")
$time = $venue.parent()#.match()
)

)

如您所见,我无法弄清楚如何从上述结构中获取时间。

通常,这将是 li 末尾的一些纯文本,对应于特定的节目,因此对于类似的内容

  • 旧金山山底 Matt Pond PA、《灯塔与捕鲸者》、Kyle M. Terrizzi a/a $14/$16 晚上 8 点/晚上 9 点 **
  • 我希望抓取“8pm/9pm”文本

    <li><b><a href="by-club.0.html#Bottom_of_the_Hill__S_F_">Bottom of the Hill, S.F.</a></b> <a href="by-band.2.html#Matt_Pond_PA">Matt Pond PA</a>, <a href="by-band.2.html#Lighthouse_And_The_Whaler">Lighthouse And The Whaler</a>, <a href="by-band.1.html#Kyle_M__Terrizzi">Kyle M. Terrizzi</a> a/a $14/$16 8pm/9pm **

    有时它会以“8pm”的形式出现,有时会出现“8pm/9m”的形式,有时则根本不存在。

    构建正则表达式来获取此数据的最佳方法是什么?

    最佳答案

    不要对完整的原始 html 进行正则表达式(一般建议)。

    相反,尝试将 html 加载到临时容器 div(或 documentFragment 但您需要一些自定义的基本 getter-shims)。

    现在按照已知的结构工作(循环),丢弃不需要的所有内容(例如 anchor ),最后循环容器(剩下的内容)以获取最终数据(使用更简单的正则表达式,例如匹配:/(\d+[ap]m/?){1,2}$/i

    PS,来自爬虫的一句话:通常只有在完全成功地完成爬虫后,您才能知道您的最终例程! (就像您通常在最后一次查看的地方找到丢失的东西一样......)。
    正如托马拉克评论的那样:陷阱一:数据与您的预期不符。尝试研究您期望的数据格式!!

    编辑:
    额外建议:添加尽可能多的错误检查。尝试将测试过程中发现的每个缺陷转化为检查。一旦开始抓取大量数据,您需要获得任何帮助。

    考虑分块方法:如果检查失败,您不需要从数据的开头重新开始。相反,添加额外的检查/解决方案并继续您的抓取。
    否则,仅仅测试/调试您的抓取工具甚至可能看起来像 DOS 行为/流量。

    关于javascript - 正则表达式:如何从字符串中获取时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23819987/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com