我正在尝试构建一个简单的蜘蛛,它从网页(而不是整个网站)返回图像的网址。我正在使用它:
$iwr=Invoke-WebRequest -Uri "$Uri" -UseBasicParsing
但是,最近,我发现有时它并没有返回所有的图像网址,特别是我想要的图像。并且,删除-UseBasicParsing开关解决了以下问题:
$iwr=Invoke-WebRequest -Uri "$Uri"
但是,它会产生另一个问题。 [编辑]我一执行下面的语句:
$iwr.Images
或
$iwr.Images.src
它会弹出一个弹出窗口
"You ll need an app to open this about."
我已经在几天前首次配置了我的Internet Explorer,我已经重新检查了它。我将用户代理更改为chrome,我仍然弹出。 如何阻止任何网页/网站的弹出窗口?
[编辑]:一个更有效的脚本解决了这个问题,它仍然使用-UseBasicParsing开关。它不会给出任何弹出窗口,但会返回所有图片网址,包括某种“蒙面”网址。归功于@postanote如下:
Clear-Host
# Regular expression Urls terminating with '.jpg' or '.png' for domain name space
$regexDomainAddress = "[(http(s)?):\/\/(www\.)?a-z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-z0-9@:%_\+.~#?&//=]*)((.jpg(\/)?)|(.png(\/)?)){1}(?!([\w\/]+))"
$images=((Invoke-WebRequest –Uri $url -UseBasicParsing).Images `
| Select-String -pattern $regexDomainAddress -Allmatches `
| ForEach-Object {$_.Matches} `
| Select-Object $_.Value -Unique).Value -replace 'href=','' `
| Select-Object -Unique
答案 0 :(得分:1)
你试图做的事情与这篇文章非常相似:
如何让输出文件包含网页上的图像和 不只是图像的链接?
更新
OP更新后的跟进
使用您的确切帖子,我在我测试的系统上根本没有弹出任何弹出窗口。
$iwr=Invoke-WebRequest -Uri "$url" -UseBasicParsing
$iwr.Images
outerHTML : <img id="id_p" class="id_avatar sw_spd" style="display:none" aria-hidden="true"
src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7" aria-label="Profile Picture"
onError="FallBackToDefaultProfilePic(this)"/>
tagName : IMG
id : id_p
class : id_avatar sw_spd
style : display:none
aria-hidden : true
src : data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7
aria-label : Profile Picture
onError : FallBackToDefaultProfilePic(this)
...
$iwr.Images.src
data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAEALAAAAAABAAEAAAIBTAA7
/sa/simg/sw_mg_l_4d_cct.png
http://tse3.mm.bing.net/th?id=OIP.fIx_Z6ywbsKCvY-PQkH8NAHaGN&w=230&h=170&rs=1&pcl=dddddd&o=5&pid=1.1
....
所以,这听起来像你主人的环境。所以,给下面的方法一个镜头,看看你是否被任何弹出窗口击中。它的代码更多,但如果适用于您的用例,可能是一个选项。
Clear-Host
# Regular expression Urls terminating with '.jpg' or '.png' for domain name space
$regexDomainAddress = "[(http(s)?):\/\/(www\.)?a-z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-z0-9@:%_\+.~#?&//=]*)((.jpg(\/)?)|(.png(\/)?)){1}(?!([\w\/]+))"
((Invoke-WebRequest –Uri $url).Links `
| Select-String -pattern $regexDomainAddress -Allmatches `
| ForEach-Object {$_.Matches} `
| Select-Object $_.Value -Unique).Value -replace 'href=','' `
| Select-Object -Unique
Clear-Host
# Regular expression Urls terminating with '.jpg' or '.png' for relative url
$regexRelativeUrl = "[a-z]{2,6}\b([-a-z0-9@:%_\+.~#?&//=]*)((.jpg(\/)?)|(.png(\/)?)){1}(?!([\w\/]+))"
((Invoke-WebRequest –Uri $url).Links `
| Select-String -pattern $regexRelativeUrl -Allmatches `
| ForEach-Object {$_.Matches} `
| Select-Object $_.Value -Unique).Value -replace 'href=','' `
| Select-Object -Unique