如何读取一个网页的一个特定的网页链接呢?
目前一个变量$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只能是数值形的。 抓取网页源码,用正则获取URL 抓取网页源码,用正则获取URL
小影 发表于 2012-12-20 11:00 http://www.autoitx.com/images/common/back.gif
我不是太懂,怎么抓取网页源码呢,调哪一个.au3呢,这种正则我也不是太会写。 调用IE.AU3文件里面的_IEBodyReadHTML函数
类似的函数有几个,建议学习下吧! 你要提取的是那部分的URL。。。楼主你抓个图说明一下! 你要提取的是那部分的URL。。。楼主你抓个图说明一下!
小影 发表于 2012-12-20 11:36 http://www.autoitx.com/images/common/back.gif 调用IE.AU3文件里面的_IEBodyReadHTML函数
类似的函数有几个,建议学习下吧!
小影 发表于 2012-12-20 11:34 http://www.autoitx.com/images/common/back.gif
这个_IEBodyReadHTML函数是怎么一个格式,哪里有说明吗? 本帖最后由 小影 于 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, "(.+\&)amp;(.+)", 3)
If Not @error Then GUICtrlSetData($gccal, $a & $a)
EndIf
EndFunc ;==>test
Func wm_syscommand($hWnd, $sMsg, $sWParam, $slParam)
Switch $sWParam
Case 61536
Exit
EndSwitch
EndFunc ;==>wm_syscommand
我是指PMID是变化的,是个变量,我把PMID写成11843217则出现问题了,好像多了一个amp;这个是什么东西。怎么去掉呢? 回复 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,"(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
http://www.ncbi.nlm.nih.gov/pubmed/23152893
这个是两个图标的,好像上面的程序只能找到一个URL,另外一个URL没显示出来吧。 回复 11# sex123
自己修改下就行了,方法在这了!!
按具体的情况修改下就能实现了! 另外,你写的这个正则能不能写成找coin for这个字符,URL就在这个 coin for 周围。 回复 13# sex123
这个得仔细看HTML源码才能确定。。。你可以研究一下,HTML3是个数组来的 回复 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)
页:
[1]
2