【已解决】哪位老师能帮忙用正则提取网页上的节假日安排!【感谢afan版主完美解决】
本帖最后由 fybhwsx 于 2016-4-2 14:15 编辑折腾好长时间了,没有结果啊!#include <IE.au3>
$jjrap = "元旦:2016/01/01 2016/01/02 2016/01/03 " & @CRLF & _
"春节:2016/02/07 2016/02/08 2016/02/09 2016/02/10 2016/02/11 2016/02/12 2016/02/13" & @CRLF & _
"清明:2016/04/02 2016/04/03 2016/04/04 " & @CRLF & _
"劳动:2016/04/30 2016/05/01 2016/05/02 " & @CRLF & _
"端午:2016/06/09 2016/06/10 2016/06/11 " & @CRLF & _
"中秋:2016/09/15 2016/09/16 2016/09/17 " & @CRLF & _
"国庆:2016/10/01 2016/10/02 2016/10/03 2016/10/04 2016/10/05 2016/10/06 2016/10/07"
$jjr = IniRead("d:\节假日.ini", "节假日", "$jjr", "")
If $jjr = "" Then
Local $oIE = _IECreate("https://www.baidu.com/s?tn=80035161_2_dg&wd=%E8%8A%82%E5%81%87%E6%97%A5")
;MsgBox(0, "Result", _IEDocReadHTML($oIE));IniWrite("d:\节假日.ini", "节假日", "$oIE", _IEDocReadHTML($oIE))
;想通过网址自动提取如上面$jjrap的时间格式
IniWrite("d:\节假日.ini", "节假日", "$jjr", $jjrap)
EndIf
其实每年也就更新这么一次,强迫症伤不起啊,总想把它整成自动的。。 #include <INet.au3>
#include <Array.au3>
Local $bSource = _INetGetSource('http://www.baidu.com/s?tn=80035161_2_dg&wd=%E8%8A%82%E5%81%87%E6%97%A5', 0)
Local $sSource = BinaryToString($bSource, 4)
Local $aTmp = StringRegExp($sSource, '<th>节日</th>[\s\S]+?</table>', 1)
If @Error Then Exit Msgbox(48, '', '获取网页源错误')
Local $aOk = StringRegExp($aTmp, '<tr>\s+<td>(.+?)</.+?\s+<td>(.+?)</', 3)
_ArrayDisplay($aOk)剩下的自己来 万能的A版啊,谢谢!!如果您能把时间格式也改了多好啊,剩下的我不知道还要研究多长时间呢,不是得寸进尺,实在是菜鸟力不从心啊。。 回复 4# fybhwsx
一年也就搞一次,手动不还快些啊~万一网页改动一下,就很有可能前功尽弃,一年内不改几乎不可能 好吧#include <INet.au3>
#include <Date.au3>
Local $bSource = _INetGetSource('http://www.baidu.com/s?tn=80035161_2_dg&wd=%E8%8A%82%E5%81%87%E6%97%A5', 0)
Local $sSource = BinaryToString($bSource, 4)
Local $aTmp = StringRegExp($sSource, '<th>节日</th>[\s\S]+?</table>', 1)
If @error Then Exit MsgBox(48, '', '获取网页源错误')
Local $aOk = StringRegExp($aTmp, '<tr>\s+<td>(.+?)</.+?\s+<td>(.+?)</[\s\S]+?\s+<td>共(\d+)天</', 3)
Local $sOut = '', $i, $j
For $i = 0 To UBound($aOk) - 1 Step 3
$sOut &= StringLeft($aOk[$i], 2) & ':' & _CreatDateStr($aOk[$i + 1], $aOk[$i + 2]) & @CRLF
Next
MsgBox(0, @YEAR & ' 年节假日安排', $sOut)
Func _CreatDateStr($sData, $vDay)
Local $aTmp = StringRegExp($sData, '^(\d+)月(\d+)日', 1)
If @Error Then Return SetError(1, 0, '')
Local $sD = StringFormat('%04s/%02s/%02s', @YEAR, $aTmp, $aTmp)
Local $sOut = $sD & ' ', $i, $sBak = $sD
For $i = 2 To $vDay
$sBak = _DateAdd('d', 1, $sBak)
$sOut &= $sBak & ' '
Next
Return $sOut
EndFunc ;==>_CreatDateStr 好吧
afan 发表于 2016-4-2 13:54 http://www.autoitx.com/images/common/back.gif
太激动了!终于实现了想法,谢谢,谢谢A版!!虽然不知道网页什么时候改版,但A版的代码够我慢慢消化很长时间了。。
页:
[1]