如何提高爬虫获取效率
今天在偶然间在爬虫群面看到一个同学提了一个有趣的问题,如何优化 Python 的速度?他原本的问题是这样的,他写一个 Python 爬虫,单线程 感觉过于慢了,达不到数据量的要求(十万级页面)。求问有哪些可以提高爬取效率的方法?
我看了下群里好多人也发出了同样的问题,但是帮助解答的没有几个。我想很多同学肯定也会百度搜索这个问题的答案吧,所以今天我们就以这个问题来进行一些分享。程序提速这个问题其实解决方案就摆在那里,要么通过并发来提高单位时间内处理的工作量,要么从程序本身去找提效点,比如爬取的数据的传输方式或提高处理数据的速度等。比如通过提高并发来提高数据量,这就涉及到我们在获取数据的时候配置的代理质量,代理的延迟,速度,带宽等是否高效。一般质量高的代理对提高数据获取量是很有帮助的,这里我们简单的示例一个加上代理的爬虫:
#! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://httpbin.org/ip" # 要访问的目标HTTPS页面 # targetUrl = "https://httpbin.org/ip" # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, "user" : proxyUser, "pass" : proxyPass, } # 设置 http和https访问都是用HTTP代理 proxies = { "http" : proxyMeta, "https" : proxyMeta, } # 设置IP切换头 tunnel = random.randint(1,10000) headers = {"Proxy-Tunnel": str(tunnel)} resp = requests.get(targetUrl, proxies=proxies, headers=headers) print resp.status_code print resp.text
这里我们对比了一般的代理IP,相同的测试网站下,质量高的代理IP速度和延迟都是非常高效的。当然爬虫速度的提高还跟爬虫是使用的单线程、多线程,多进程等有关系。对于一个严谨的程序员来说,这些都只是其中的一部分而已,实际的处理过程中,肯定还有其他的优化点和方式,大家有研究的可以留言交流下。
如何提高爬虫获取效率
xiaotaomi
会员积分:6520
今天在偶然间在爬虫群面看到一个同学提了一个有趣的问题,如何优化 Python 的速度?他原本的问题是这样的,他写一个 Python 爬虫,单线程 感觉过于慢了,达不到数据量的要求(十万级页面)。求问有哪些可以提高爬取效率的方法?
我看了下群里好多人也发出了同样的问题,但是帮助解答的没有几个。我想很多同学肯定也会百度搜索这个问题的答案吧,所以今天我们就以这个问题来进行一些分享。程序提速这个问题其实解决方案就摆在那里,要么通过并发来提高单位时间内处理的工作量,要么从程序本身去找提效点,比如爬取的数据的传输方式或提高处理数据的速度等。比如通过提高并发来提高数据量,这就涉及到我们在获取数据的时候配置的代理质量,代理的延迟,速度,带宽等是否高效。一般质量高的代理对提高数据获取量是很有帮助的,这里我们简单的示例一个加上代理的爬虫:
#! -*- encoding:utf-8 -*- import requests import random # 要访问的目标页面 targetUrl = "http://httpbin.org/ip" # 要访问的目标HTTPS页面 # targetUrl = "https://httpbin.org/ip" # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % { "host" : proxyHost, "port" : proxyPort, "user" : proxyUser, "pass" : proxyPass, } # 设置 http和https访问都是用HTTP代理 proxies = { "http" : proxyMeta, "https" : proxyMeta, } # 设置IP切换头 tunnel = random.randint(1,10000) headers = {"Proxy-Tunnel": str(tunnel)} resp = requests.get(targetUrl, proxies=proxies, headers=headers) print resp.status_code print resp.text
这里我们对比了一般的代理IP,相同的测试网站下,质量高的代理IP速度和延迟都是非常高效的。当然爬虫速度的提高还跟爬虫是使用的单线程、多线程,多进程等有关系。对于一个严谨的程序员来说,这些都只是其中的一部分而已,实际的处理过程中,肯定还有其他的优化点和方式,大家有研究的可以留言交流下。
22-04-26 16:38
793
0
回复
暂无评论