找回密码
 加入
搜索
查看: 3180|回复: 6

[AU3基础] 【已解决】哪位老师能帮忙用正则提取网页上的节假日安排!【感谢afan版主完美解决】

[复制链接]
发表于 2016-4-2 10:38:42 | 显示全部楼层 |阅读模式
本帖最后由 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

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

 楼主| 发表于 2016-4-2 11:17:21 | 显示全部楼层
其实每年也就更新这么一次,强迫症伤不起啊,总想把它整成自动的。。
发表于 2016-4-2 11:30:57 | 显示全部楼层
#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[0], '<tr>\s+<td>(.+?)</.+?\s+<td>(.+?)</', 3)
_ArrayDisplay($aOk)
剩下的自己来
 楼主| 发表于 2016-4-2 12:56:07 | 显示全部楼层
万能的A版啊,谢谢!!如果您能把时间格式也改了多好啊,剩下的我不知道还要研究多长时间呢,不是得寸进尺,实在是菜鸟力不从心啊。。
发表于 2016-4-2 13:09:56 | 显示全部楼层
回复 4# fybhwsx


    一年也就搞一次,手动不还快些啊~  万一网页改动一下,就很有可能前功尽弃,一年内不改几乎不可能
发表于 2016-4-2 13:54:27 | 显示全部楼层
好吧
#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[0], '<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[0], $aTmp[1])
        Local $sOut = $sD & ' ', $i, $sBak = $sD
        For $i = 2 To $vDay
                $sBak = _DateAdd('d', 1, $sBak)
                $sOut &= $sBak & ' '
        Next
        Return $sOut
EndFunc   ;==>_CreatDateStr
 楼主| 发表于 2016-4-2 14:11:04 | 显示全部楼层
好吧
afan 发表于 2016-4-2 13:54



    太激动了!终于实现了想法,谢谢,谢谢A版!!虽然不知道网页什么时候改版,但A版的代码够我慢慢消化很长时间了。。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-26 09:20 , Processed in 0.078304 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表