找回密码
 加入
搜索
查看: 7527|回复: 20

[IE类操作] 如何读取一个网页的一个特定的网页链接呢?

 火.. [复制链接]
发表于 2012-12-20 10:55:03 | 显示全部楼层 |阅读模式
目前一个变量$pmid=124321
则$medlineurl=http://www.ncbi.nlm.nih.gov/pubmed/124321
打开网页后右上角出现的图标所代表的url就是我想找的
http://jcp.sagepub.com/cgi/pmidlookup?view=long&pmid=124321
问这个过程怎么操作呢?
注意,有的网页右上角是没有图标的,就不能找到我想找的url了,这样的不算了,但有的又有两个图标,两个url,情况很乱。$pmid只能是数值形的。
发表于 2012-12-20 11:00:16 | 显示全部楼层
抓取网页源码,用正则获取URL
 楼主| 发表于 2012-12-20 11:30:21 | 显示全部楼层
抓取网页源码,用正则获取URL
小影 发表于 2012-12-20 11:00



    我不是太懂,怎么抓取网页源码呢,调哪一个.au3呢,这种正则我也不是太会写。
发表于 2012-12-20 11:34:43 | 显示全部楼层
调用IE.AU3文件里面的_IEBodyReadHTML函数
类似的函数有几个,建议学习下吧!
发表于 2012-12-20 11:36:29 | 显示全部楼层
你要提取的是那部分的URL。。。楼主你抓个图说明一下!
 楼主| 发表于 2012-12-20 11:44:05 | 显示全部楼层
你要提取的是那部分的URL。。。楼主你抓个图说明一下!
小影 发表于 2012-12-20 11:36

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-12-20 11:44:48 | 显示全部楼层
调用IE.AU3文件里面的_IEBodyReadHTML函数
类似的函数有几个,建议学习下吧!
小影 发表于 2012-12-20 11:34



    这个_IEBodyReadHTML函数是怎么一个格式,哪里有说明吗?
发表于 2012-12-20 12:38:06 | 显示全部楼层
本帖最后由 小影 于 2012-12-20 12:40 编辑

回复 7# sex123

代码如下

#include <IE.au3>
#include<guiconstantsex.au3>
#include<windowsconstants.au3>
GUICreate("IE", 500, 380)
Global $gccal = GUICtrlCreateInput("", 10, 340, 440, 30)
_IEErrorHandlerRegister()
$oie = _IECreateEmbedded()
Local $obj = GUICtrlCreateObj($oie, 10, 10, 490, 290)
GUISetState()
GUIRegisterMsg($WM_SYSCOMMAND, "wm_syscommand")
Global $url = "http://www.ncbi.nlm.nih.gov/pubmed/124321"
test($url)
While 1
        Local $msg = GUIGetMsg()
        Select
                Case $msg = -3
                        Exit
        EndSelect
        Sleep(1000)
WEnd

Func test($url)
        Local $html = _IENavigate($oie, $url)
        _IELoadWait($oie)
        Local $html3 = _IEBodyReadHTML($oie)
        Local $strarray = StringRegExp($html3, '<DIV><A\s*href=\"' & '([^"]+)"', 3)
        If Not @error Then
                Local $a = StringRegExp($strarray[0], "(.+\&)amp;(.+)", 3)
                If Not @error Then GUICtrlSetData($gccal, $a[0] & $a[1])
                
        EndIf
EndFunc   ;==>test
Func wm_syscommand($hWnd, $sMsg, $sWParam, $slParam)
        Switch $sWParam
                Case 61536
                        Exit
        EndSwitch
EndFunc   ;==>wm_syscommand

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-12-20 14:35:18 | 显示全部楼层
我是指PMID是变化的,是个变量,我把PMID写成11843217则出现问题了,好像多了一个amp;这个是什么东西。怎么去掉呢?
发表于 2012-12-20 15:35:42 | 显示全部楼层
回复 9# sex123
测试可用

#include <Array.au3>
#include <IE.au3>
#include<guiconstantsex.au3>
#include<windowsconstants.au3>
GUICreate("IE", 500, 380)
Global $gccal = GUICtrlCreateInput("", 10, 340, 440, 30)
_IEErrorHandlerRegister()
$oie = _IECreateEmbedded()
Local $obj = GUICtrlCreateObj($oie, 10, 10, 490, 290)
GUISetState()
GUIRegisterMsg($WM_SYSCOMMAND, "wm_syscommand")
Global $url = "http://www.ncbi.nlm.nih.gov/pubmed/11843217"
;~ Global $url = "http://www.ncbi.nlm.nih.gov/pubmed/124321"
test($url)
While 1
        Local $msg = GUIGetMsg()
        Select
                Case $msg = -3
                        Exit
        EndSelect
        Sleep(1000)
WEnd
 
Func test($url)
        Local $html = _IENavigate($oie, $url)
        _IELoadWait($oie)
        Local $html3 = _IEBodyReadHTML($oie)
        Local $strarray = StringRegExp($html3, '<DIV><A href="([^"]+)'&'"\s*target.+'&'src="'&'http://www.ncbi.nlm.nih.gov/corehtml/query/egifs/http', 3)
                
        If Not @error Then
               Local $a= StringRegExpReplace($strarray[0],"(amp;)","")
                If Not @error Then GUICtrlSetData($gccal, $a)
        EndIf
EndFunc   ;==>test
Func wm_syscommand($hWnd, $sMsg, $sWParam, $slParam)
        Switch $sWParam
                Case 61536
                        Exit
        EndSwitch
EndFunc   ;==>wm_syscommand
 楼主| 发表于 2012-12-20 16:05:50 | 显示全部楼层
http://www.ncbi.nlm.nih.gov/pubmed/23152893

这个是两个图标的,好像上面的程序只能找到一个URL,另外一个URL没显示出来吧。
发表于 2012-12-20 16:07:04 | 显示全部楼层
回复 11# sex123
自己修改下就行了,方法在这了!!
按具体的情况修改下就能实现了!
 楼主| 发表于 2012-12-20 16:12:43 | 显示全部楼层
另外,你写的这个正则能不能写成找coin for这个字符,URL就在这个 coin for 周围。
发表于 2012-12-20 16:27:53 | 显示全部楼层
回复 13# sex123
这个得仔细看HTML源码才能确定。。。你可以研究一下,HTML3是个数组来的
发表于 2012-12-20 20:59:18 | 显示全部楼层
回复 11# sex123


    类似问题,竟然发了3个帖子,太不应该了.
为了不打击你的学习劲头,姑且回复一个吧.

#include <inet.au3>
Local $url = 'http://paper.pubmed.cn/ebeco448a9'
$html = _INetGetSource($url)
$myUrl = StringRegExp($html, '"(http[^\"]+\/23181270)"', 3)
If Not @error Then MsgBox(0, '', $myUrl[0])
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-16 07:11 , Processed in 0.090097 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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