forked from Bitwise-01/Instagram-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathspyder.py
46 lines (37 loc) · 1.23 KB
/
spyder.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Date: 05/05/2018
# Author: Pure-L0G1C
# Description: Browser Manager
from requests import Session
from .scraper import Scraper, Queue
from .const import fetch_time, site_details
class Spyder(object):
def __init__(self):
self.proxy = None
self.isAlive = True
self.proxy_info = None
self.proxies = Queue()
self.scraper = Scraper()
def proxy_manager(self):
while self.isAlive:
while all([self.isAlive, self.proxies.qsize]):pass
if not self.isAlive:break
self.proxies = self.scraper.scrape(ssl_proxies=True)
[self.proxies.put(proxy) for proxy in self.scraper.scrape(new_proxies=True).queue if self.isAlive]
@property
def br(self):
session = Session()
session.proxies.update(self.proxy)
session.headers.update(site_details['header'])
return session
def renew_proxy(self, n=10):
_proxy = self.proxies.get()
proxy = { 'https': 'https://{}:{}'.format(_proxy['ip'], _proxy['port']) }
if self.proxy:
if all([self.proxy == proxy, self.proxies.qsize, n]):
self.renew_proxy(n-1)
self.proxy_info = _proxy
self.proxy = proxy
def ip_addr(self, br):
try:
return str(br.get('https://api.ipify.org/?format=text', timeout=fetch_time).text)
except:pass