PowerShell查看某博主的评论

PowerShell快速的模拟登录网站 6


用PowerShell登录网站和人工登录网站一样,需要建立一个持久的会话。有的相对容易一些,而有的却非常麻烦(比如ADFS),因此有的时候,我们可以在浏览器中登录,然后将浏览器中的会话导入。会话在客户端是由cookie维护的。

比如要想快速登录到新浪微博,那我就先用chrome登录,在F12工具中然后将weibo站点的cookie复制到剪贴板,然后就可以以登录者的身份去微博上爬数据了。

Powershell复制浏览器中的cookie

$session = New-Object Microsoft.PowerShell.Commands.WebRequestSession

Get-Content .\cookie.txt  | foreach {
#vr	6	.weibo.com	/
$line=$_ -split '/' | select -First 1
$tokens=$_.Split('	',[System.StringSplitOptions]::RemoveEmptyEntries)
$c=@{
 name=$tokens[0]
 value=$tokens[1]
 domain=$tokens[2]
}
 $cookie = New-Object System.Net.Cookie
 $cookie.Name=$c.name
 $cookie.Value=$c.Value
 $cookie.Domain=$c.domain
 $session.Cookies.Add($cookie) 
}

for($i=1;$i -le 214555;$i++){
$r=Invoke-RestMethod "http://weibo.com/aj/v6/comment/big?ajwvr=6&id=4009043251108698&page=$i&__rnd=1471928579930" -WebSession $session -UserAgent 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'
$page = $i.ToString().PadLeft('7','0')
$r.data.html | Out-File "E:\weibo.data\$page.html"
Write-Host "正在下载 $page 页"
}

我上面爬的数据是某知名博主在网上赢得的骂声。

声明:本人持中立态度,一个人再恶,也有法律管着,用不着网络暴力口诛笔伐

假如数据已经被保存到文本文件中了,我们可以用下面的代码片段来通过正则表达式解析评论和用户名:

function GetWeibo()
{
 param($file)
$raw = Get-Content $file

$group = [regex]::Matches($raw,'<div class="WB_text"(?<CommentText>.*?)</div>')
$weboList = $group | foreach {
$_.Groups['CommentText'].value
}


foreach($v in $weboList){
 $uMatch= [regex]::Match($v,'ucardconf="type=1">(?<user>.*?)</a>')
 $user = $uMatch.Groups['user'].value

 $text = $v.Substring($v.LastIndexOf('a>:')+3)
 $text = [regex]::Replace($text,'<[^>]*>','')
 $text = [regex]::Replace($text,'&nbsp;',' ')
 @{user=$user;
  text=$text}
}
}

此时将解析后的文本存到临时文件中,再使用下面的PowerShell脚本,使用Powershell中的工作流将它们上传到自己的网站上:

function Add-WeiboPost
{
param(
    $User,
    $Post
)
$body = @{
AuthKey='*************'
User=$User
Post=$Post} 
Invoke-RestMethod http://mr.lonsoon.com/query.php -Method post -Body $body 
}


workflow Push-Data
{
    param($Posts)
    foreach -parallel ($post in $posts)
    {
        $a=Add-WeiboPost -User $post.user -Post $post.text
        Write-Output $a
    }
}

$num=0;
ls E:\weibo.data | foreach {
    $posts = GetWeibo -file $_.FullName
    Push-Data -Posts $posts
    $_ | del
    $num += $posts.Count
    Write-Host "Upload $num posts"
}

我们通过fiddler的请求状态可以证明,Powershell 工作流中的foreach -parallel的确是并行的。

PowerShell并行发请求

PowerShell并行发请求

最后再调用自己网站的接口看下上传的数据:

PowerShell查看某博主的评论

PowerShell查看某博主的评论

至此,一个经典的例子从爬数据,存数据,展示数据,一条龙服务,先后用到PowerShell,php,html,JavaScript

本文链接: https://www.pstips.net/mock-login.html
请尊重原作者和编辑的辛勤劳动,欢迎转载,并注明出处!

关于 Mooser Lee

我是一个Powershell的爱好者,创建了PowerShell中文博客,热衷于Powershell技术的搜集和分享。本站部分内容来源于互联网,不足之处敬请谅解,并欢迎您批评指正。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

6 条评论 “PowerShell快速的模拟登录网站

      • pansal

        感谢博主分享! 我试着借用你的脚本调取cookies,但似乎失败了。最后down到的页面仍然是要求提供用户名和密码的登陆页前页面。博主可不可以指教一下,我不知道问题出在哪里?

        ====这是get cookie的部分~ 稍作了一点改动========
        $session = New-Object Microsoft.PowerShell.Commands.WebRequestSession
        Get-Content .\cookie.txt | foreach {

        $line=$_ -split ‘/’ | select -First 1
        $tokens=$_.Split(“`t”).TrimEnd()
        $c=@{
        name=$tokens[0]
        value=$tokens[1]
        domain=$tokens[2]
        }
        $cookie = New-Object System.Net.Cookie
        $cookie.Name=$c.name
        $cookie.Value=$c.Value
        $cookie.Domain=$c.domain
        $session.Cookies.Add($cookie)
        }
        ========================

        =========这是cookie.txt的内容=============
        JSESSIONID XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.tomcat1 tz.cscec.com /x5 Wed Feb 07 2018 14:47:48 GMT+0800 (中国标准时间)
        justep-remember true tz.cscec.com / Tue Feb 14 2017 10:22:03 GMT+0800 (中国标准时间)
        justep-username anyone tz.cscec.com / Tue Feb 14 2017 14:47:39 GMT+0800 (中国标准时间)
        request-use-base64 false tz.cscec.com / Wed Feb 07 2018 14:47:48 GMT+0800 (中国标准时间)
        yunsuo_session_verify SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS .cscec.com / Mon Dec 27 2021 02:58:58 GMT+0800 (中国标准时间)

        ===================================