【问题标题】:Intelligent screen scraping using different proxies and user-agents randomly?随机使用不同的代理和用户代理进行智能屏幕抓取?
【发布时间】:2010-05-10 15:08:15
【问题描述】:

我想从 http://abc.com/view_page.aspx?ID= 下载几个 HTML 页面,ID 来自不同数字的数组。

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

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

这样做的最佳方法是什么? urllib2? pycURL?卷曲?对于手头的任务,您更喜欢什么?

请指教。谢谢大家!

【问题讨论】:

  • 为什么要随机化用户代理?
  • 我不想透露我是下载该页面的人。为了加强,如果我们随机使用不同的浏览器,那将巩固我的匿名性,你说什么?

标签: python proxy screen-scraping


【解决方案1】:

使用类似的东西:

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) man page了解更多信息。

    【讨论】:

    • 这是一个好的开始,谢谢! --random-wait 可以使用。虽然不太确定代理实现。有什么想法吗?
    • 我只使用wget 进行基本报废,很抱歉,我无法为您提供有关使用它进行代理的更多信息。
    • 在 wget 中使用代理:setenv http_proxy=proxy.example.com:8080; wget --proxy-user=foo --proxy-password=bar --user-agent="Frobzilla/1.1" [url]
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-18
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2018-02-05
      • 2011-01-12
      相关资源
      最近更新 更多