暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

使用Tor网络采集目标数据

Python爬虫和数据挖掘 2021-07-08
2434

文章目录


  • 文章目录

    • 1. Tor 介绍

    • 2. Tor 的安装和使用

    • 3. Python 使用 Tor

    • 4. 关于更换 Tor IP

    • 5. 总结


1. Tor 介绍


TOR 是全球有名的匿名网络,具有很高的匿名性,简单点说,Tor 网络利用流量转发的方式,达到隐藏真实请求端(客户端)的目的,是目前比较受欢迎也比较有名气的的匿名工具。其原理图如下由于出口 IP 随机轮换,且具有很强的匿名性,因此我们可以使用 Tor 网络作为爬虫代理,用来解决一些网站的 IP 封禁问题。

2. Tor 的安装和使用


Tor 安装

sudo apt-get install tor

重启

sudo etc/init.d/tor restart

生成密码

tor --hash-password mypassword
这个操作会生成一个 Hash 串

修改配置文件

命令 vim etc/tor/torrc

  • ControlPort 9051
  • HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C

3. Python 使用 Tor


Python2

sudo pip install requests
sudo pip install requesocks

#!/usr/bin/python
#coding:utf-8

import os
import requesocks
import socks
import socket
import requests
import time
import sys

reload(sys)
sys.setdefaultencoding('utf-8')

url = 'http://api.ipify.org?format=json'


def getip_requests(url):
    print  "(+)  Sending  request  with  plain  requests..."
    r = requests.get(url)
    print  "(+)  IP  is:  " + r.text.replace("\n""")


def getip_requesocks(url):
    print  "(+)  Sending  request  with  requesocks..."
    session = requesocks.session()
    session.proxies = {'http''socks5://127.0.0.1:9050',
                       'https''socks5://127.0.0.1:9050'}
    r = session.get(url)
    print  "(+)  IP  is:  " + r.text.replace("\n""")


def main():
    print  "Running  tests..."
    getip_requests(url)
    getip_requesocks(url)
    os.system("""(echo  authenticate  '"mypassword"';  echo  signal  newnym;  echo  \
quit)  |  nc  localhost  9051"""
)
    time.sleep(2)
    getip_requesocks(url)


if __name__ == "__main__":
    main()


复制

Python3

sudo pip3 install pysocks

#!/usr/bin/python3

import requests
import time
import sys
import socket
import socks

socks.set_default_proxy(socks.SOCKS5, "127.0.0.1"9050)
socket.socket = socks.socksocket

# 使用requests包进行常规请求即可


复制

Python Tor 管理包 stem

  1. 查看官方文档[1]
  2. 该包 Python2 和 Python3 均可以使用
  3. 安装方式 pip install stem sudo apt-get install python-stem
from stem import Signal
from stem.control import Controller

# signal TOR for a new connection
def renew_connection():
    with Controller.from_port(port = 9051as controller:
        controller.authenticate(password="password")
        controller.signal(Signal.NEWNYM)

复制

注意:

  • 需要更换 IP 的时候,需要重新新建 Session 对象
  • 使用 stem 包,要求必须设置密码(修改配置文件:ControlPort 和 HashedControlPassword)

4. 关于更换 Tor IP

亲测最简单也最有效的切换 IP 方式就是「直接重启」

import os
os.system('sudo /etc/init.d/tor restart')

复制

5. 总结

  1. 我们可以使用 Tor 网络,解决一些网站的 IP 封禁问题
  2. Tor 网络请求数据会经过多次转发,且服务器大多位于国外,导致请求速度慢,如果一次请求数据太多,并不建议使用 Tor 网络作为代理
  3. Tor 可用的出口节点 IP 不多
  4. 使用 Tor 网络作为代理,可以访问‘暗网’数据

Reference

[1]

官方文档: https://stem.torproject.org/


文章转载自Python爬虫和数据挖掘,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论