线程简单来说就是爬虫程序中的一个命令执行。单线程就是爬虫程序执行一个命令,多线程就是爬虫程序同时运行多个命令,多线程不仅能提高速度,也能加快采集进度。当然多线程也有优点,也有缺点,线程也是爬虫程序中的一部分,使用多线程会占用爬虫程序的内存,有可能会导致占用的内存越来越多。所以多线程需要技术去调试和管理。爬虫使用多线程的目的性就是为了提高抓取的数据效率,如果有些网站对访问速度有限制,就可以采用多线程,每个线程使用爬虫代理IP采集数据。 python爬虫支持多线程数据采集,为了实现python爬虫多线程,可以采用一下方案思路:
在采集的目标网站中下载页面,然后在已下载的页面中更新出新的网址,依次类推,就相当于在python爬虫使用多线程来处理网络请求,使用爬虫代理获取API连接中的API连接里面数据,然后将返回的数据结果保存,其它线程在分析这个数据,最后储存在文件中。 多线程代码参考: [AppleScript] 纯文本查看 复制代码 #! -*- encoding:utf-8 -*-
import aiohttp, asyncio
targetUrl = "http://httpbin.org/ip"
# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"
# 代理验证信息
proxyUser = "username"
proxyPass = "password"
proxyServer = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
"host" : proxyHost,
"port" : proxyPort,
"user" : proxyUser,
"pass" : proxyPass,
}
userAgent = "Chrome/83.0.4103.61"
async def entry():
conn = aiohttp.TCPConnector(verify_ssl=False)
async with aiohttp.ClientSession(headers={"User-Agent": userAgent}, connector=conn) as session:
async with session.get(targetUrl, proxy=proxyServer) as resp:
body = await resp.read()
print(resp.status)
print(body)
loop = asyncio.get_event_loop()
loop.run_until_complete(entry())
loop.run_forever()
|