使用不同的代理和用户代理随机进行智能屏幕抓取?

8

我希望从http://abc.com/view_page.aspx?ID=下载多个HTML页面,ID是不同数字的数组。

我想访问多个此URL实例,并使用不同的代理IP/端口将文件保存为[ID].HTML。

我想使用不同的用户代理,并在每次下载之前随机等待时间。

最佳方法是什么? urllib2? pycURL? cURL?你喜欢手头的任务用哪一个?

请给予建议。谢谢大家!


2
你为什么想要随机化用户代理? - Heath Hunnicutt
2
我不想透露我是下载该页面的人。如果我们随机使用不同的浏览器,这将加强我的匿名性,你觉得呢? - ThinkCode
3个回答

5

使用类似以下的内容:

import urllib2
import time
import random

MAX_WAIT = 5
ids = ...
agents = ...
proxies = ...

for id in ids:
    url = 'http://abc.com/view_page.aspx?ID=%d' % id
    opener = urllib2.build_opener(urllib2.ProxyHandler({'http' : proxies[0]}))
    html = opener.open(urllib2.Request(url, None, {'User-agent': agents[0]})).read()
    open('%d.html' % id, 'w').write(html)
    agents.append(agents.pop()) # cycle
    proxies.append(proxies.pop())
    time.sleep(MAX_WAIT*random.random())

2
使用Unix工具wget。它有选项可以指定自定义用户代理和每次检索页面之间的延迟。
您可以查看wget(1)手册页以获取更多信息。

这是一个不错的开始,谢谢!可以使用“random-wait”。但是代理实现方面我不太确定。有什么想法吗? - ThinkCode
我只使用wget进行基本的网页抓取,所以很抱歉,我无法为您提供更多关于代理的信息。 - pajton
1
在wget中使用代理:setenv http_proxy=http://proxy.example.com:8080; wget --proxy-user=foo --proxy-password=bar --user-agent="Frobzilla/1.1" [url] - wump

2
如果您不想使用公开代理,请查看ProxyMesh,它可以为您进行IP轮换/随机化。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接