我是全新的...不知道两周前网页拼接是什么意思。经过一些研究,我使用beautifulsoup和selenium实现了python3代码。效果很好。现在,考虑到我需要抓取的数据量,我已经明白scrapy1可能是正确的工具,特别是如果我旋转IP地址。我发现了理论上应该有用的一些代码。但是,当调用RetryChangeProxyMiddleware时,我收到以下消息:
[WinError 10061]无法建立连接,因为目标计算机主动拒绝它
因此,我使用了这个:from stem.control import Controller
将Controller.from_port(port = 9051)作为控制器:
controller.authenticate('canal007') # provide the password here if you set one
bytes_read = controller.get_info("traffic/read")
bytes_written = controller.get_info("traffic/written")
print("My Tor relay has read %s bytes and written %s." % (bytes_read, bytes_written))
返回相同的消息。所以我想我有一个'端口听力问题'在我身边。我应该在我的Windows机器上拥有管理员权限。我相信我没有使用任何代理(我在这里谨慎,因为我不是专家,......)。我试图打开和关闭Windows防火墙,但它没有改变任何东西。
Tor已安装,当我运行它时,它可以工作。保存一些网站,但我试图用scrapy刮掉的那个网站可以使用Tor。
这是我的torrc.orig.1文件: ControlPort 9051 AUTHENTICATE“mypasswd”
我已经使用tor.exe生成了一个hashkey并在以下使用scrapy调用的中间件中使用它:
def process_request(self, request, spider):
if random.choice(range(1,100)) <= 80:
logging.log(logging.INFO, 'Changing proxy')
tn = telnetlib.Telnet('127.0.0.1', 9051)
tn.read_until("Escape character is '^]'.", 2)
tn.write('AUTHENTICATE "<hashkey>"\r\n')
tn.read_until("250 OK", 2)
tn.write("signal NEWNYM\r\n")
tn.read_until("250 OK", 2)
tn.write("quit\r\n")
tn.close()
logging.log(logging.INFO, '>>>> Proxy changed. Sleep Time')
time.sleep(10)
如果我丢弃这个中间件,那我就可以刮掉了。但我没有旋转的IP地址,...所以我迟早会被我想要刮掉的服务器拒绝。
如果有人能以一种非常有说服力的方式提供帮助,那就太棒了。
感谢社区!!