php多线程抓取多个网页(单线程就是一个一个命令执行,采集速率较慢源码:多线程 )

优采云 发布时间: 2021-12-13 13:12

  php多线程抓取多个网页(单线程就是一个一个命令执行,采集速率较慢源码:多线程

)

  现在网络爬虫似乎很简单。如果你做爬虫,这个想法是错误的。为爬虫设计的东西很多,无论是爬虫框架,爬虫软件,爬虫程序,爬虫策略,写爬虫都比较麻烦。写好爬虫程序后,从网站中抓取数据似乎很容易。当然,当你在网站上抓取了很多东西并且某个网站限制了爬取行为时,事情很快就会变得非常棘手。

  对于大量爬取的团队或企业,需要仔细了解爬取的策略

  大型业务爬取和普通网络爬取应用的区别在于采集的量也完全不同。

  由于时间通常是限制因素,因此*敏*感*词*数据爬取需要您的爬虫在不影响数据质量的情况下高速爬取网页。这时候企业用户可以启用多线程爬虫。

  什么是多线程?

  多线程是指爬虫程序中的多个命令同时执行。在一个程序中,可以同时运行多个不同的线程来执行不同的任务。简单来说就是在单个线程下创建多个线程,同时执行命令。采集。

  多线程的好处:

  可以提高采集的速率。在多线程爬虫程序中,一个线程采集的数量比较少,多线程的执行可以增加采集的数量,提供采集的速率。

  多线程和单线程的区别:

  多个线程可以同时执行命令,提高采集的效率。单线程就是一条一条的执行命令,采集的速度比较慢。

  多线程爬虫源码:

   package main

import (

"net/url"

"net/http"

"bytes"

"fmt"

"io/ioutil"

)

// 代理服务器(产品官网 www.16yun.cn)

const ProxyServer = "t.16yun.cn:31111"

type ProxyAuth struct {

Username string

Password string

}

func (p ProxyAuth) ProxyClient() http.Client {

var proxyURL *url.URL

if p.Username != ""&& p.Password!="" {

proxyURL, _ = url.Parse("http://" + p.Username + ":" + p.Password + "@" + ProxyServer)

}else{

proxyURL, _ = url.Parse("http://" + ProxyServer)

}

return http.Client{Transport: &http.Transport{Proxy:http.ProxyURL(proxyURL)}}

}

func main() {

targetURI := "https://httpbin.org/ip"

// 初始化 proxy http client

client := ProxyAuth{"username", "password"}.ProxyClient()

request, _ := http.NewRequest("GET", targetURI, bytes.NewBuffer([] byte(``)))

// 设置Proxy-Tunnel

// rand.Seed(time.Now().UnixNano())

// tunnel := rand.Intn(10000)

// request.Header.Set("Proxy-Tunnel", strconv.Itoa(tunnel) )

response, err := client.Do(request)

if err != nil {

panic("failed to connect: " + err.Error())

} else {

bodyByte, err := ioutil.ReadAll(response.Body)

if err != nil {

fmt.Println("读取 Body 时出错", err)

return

}

response.Body.Close()

body := string(bodyByte)

fmt.Println("Response Status:", response.Status)

fmt.Println("Response Header:", response.Header)

fmt.Println("Response Body:\n", body)

}

}

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线