用 ScrapySharp 并行下载天涯图片

本文展示了如何利用F#和ScrapySharp库并行下载天涯论坛帖子中的图片。首先加载HTML,然后选择图片URL,接着定义一个函数获取图片并保存到本地,最后通过Parallel.ForEach进行并行下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用 ScrapySharp 并行下载天涯图片


#r "HtmlAgilityPack.dll"
#r "ScrapySharp.dll"

open System
open System.Threading.Tasks
open HtmlAgilityPack
open ScrapySharp.Extensions


let url  = "http://bbs.tianya.cn/post-12-563201-1.shtml"
let web  = new ScrapySharp.Network.ScrapingBrowser()
let html = web.DownloadString(new Uri(url))


let doc = new HtmlAgilityPack.HtmlDocument()
doc.LoadHtml( html )


let urls = 
    doc.DocumentNode.CssSelect("div.bbs-content > img")
    |> Seq.map(fun i -> i.GetAttributeValue("original"))


let urls = [ "http://img3.laibafile.cn/p/m/166829011.jpg";
             "http://img3.laibafile.cn/p/m/166829027.jpg";
             "http://img3.laibafile.cn/p/m/166829000.jpg";
             "http://img3.laibafile.cn/p/m/166829039.jpg";
             "http://img3.laibafile.cn/p/m/166829034.jpg";
             "http://img3.laibafile.cn/p/m/166829030.jpg";
             "http://img3.laibafile.cn/p/m/166829016.jpg";
             "http://img3.laibafile.cn/p/m/166829024.jpg"  ]


let GetPicture (filePath: string)  (url: string) =
    let path = filePath.Substring(0, filePath.LastIndexOf("."))
    let ty = 
        let t = new Uri( url )
        match t.Authority with 
        | var when var.Contains("laibafile.cn") -> "http://bbs.tianya.cn"
        | var when var.Contains("tianya.cn")    -> "http://bbs.tianya.cn"
        | _  -> t.Scheme + "://" + t.Authority


    let web = new ScrapySharp.Network.ScrapingBrowser()
    web.NavigateToPage( new Uri(ty)) |> ignore


    if not( IO.Directory.Exists( path ) ) then IO.Directory.CreateDirectory( path ) |> ignore
    let file = url.Substring( url.LastIndexOf("/") )
    let pic = (web.NavigateToPage( new Uri( url ))).RawResponse.Body
    printfn "%s" url
    File.WriteAllBytes( ( path + file ), pic )


let outPic = GetPicture filePath


Parallel.ForEach(urls, outPic) |> ignore

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值