php多线程抓取多个网页(单线程就是一个一个命令执行,采集速率较慢源码:多线程 )
优采云 发布时间: 2021-12-13 13:12php多线程抓取多个网页(单线程就是一个一个命令执行,采集速率较慢源码:多线程
)
现在网络爬虫似乎很简单。如果你做爬虫,这个想法是错误的。为爬虫设计的东西很多,无论是爬虫框架,爬虫软件,爬虫程序,爬虫策略,写爬虫都比较麻烦。写好爬虫程序后,从网站中抓取数据似乎很容易。当然,当你在网站上抓取了很多东西并且某个网站限制了爬取行为时,事情很快就会变得非常棘手。
对于大量爬取的团队或企业,需要仔细了解爬取的策略
大型业务爬取和普通网络爬取应用的区别在于采集的量也完全不同。
由于时间通常是限制因素,因此*敏*感*词*数据爬取需要您的爬虫在不影响数据质量的情况下高速爬取网页。这时候企业用户可以启用多线程爬虫。
什么是多线程?
多线程是指爬虫程序中的多个命令同时执行。在一个程序中,可以同时运行多个不同的线程来执行不同的任务。简单来说就是在单个线程下创建多个线程,同时执行命令。采集。
多线程的好处:
可以提高采集的速率。在多线程爬虫程序中,一个线程采集的数量比较少,多线程的执行可以增加采集的数量,提供采集的速率。
多线程和单线程的区别:
多个线程可以同时执行命令,提高采集的效率。单线程就是一条一条的执行命令,采集的速度比较慢。
多线程爬虫源码:
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)
}
}