-
Notifications
You must be signed in to change notification settings - Fork 0
/
nums_crawler.py
99 lines (73 loc) · 2.77 KB
/
nums_crawler.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
""""
* ************* Nums Crawler ***************
*
* Ecrit par Yassir Karroum [ukarroum17@gmail.com] [https://github.com/ukarroum]
* Le 4 aout 2016
*
* Un simple script qui permet de récupérer des numéros de téléphone marocains en masse depuis des sites d'annonce en ligne.
*/
"""
from torPythonInt import *
from bs4 import BeautifulSoup
from stem.util import term
import io
import sys
OKGREEN = '\033[92m'
BOLD = '\033[1m'
ENDC = '\033[0m'
def souk_ma_crawler(begin=1, n=10):
"""
Souk.ma Crawler : Permet de récupérer les numéros de téléphone disponible sur Souk.ma.
:param begin: Par où commencer la récupération (numéro de page).
:param n: Nombre de numéros souhaités
:return: Liste contenant les numéros.
"""
nums = []
iterations = {'success': 0, 'failure': 0}
page = begin
new_identity()
while len(nums) < n:
soup = BeautifulSoup(get_html("http://www.souk.ma/fr/Maroc/&p="+str(page)), "html.parser")
if "Sorry, there are no Web results for this search!" in soup:
print(term.format("Vous atteint la limite des résultats de recherche .\n", term.Color.RED))
break
if len(soup.find_all('div', class_="desc")):
iterations["success"] += 1
else:
iterations["failure"] += 1
new_identity()
continue
for div in soup.find_all('div', class_="desc"):
if div.h2:
annonce = BeautifulSoup(get_html(div.h2.a['href']), "html.parser")
try:
if annonce.find_all('div', class_="userinfo-pro"):
if annonce.find_all('div', class_="inner")[0].contents[7].text[0] == '0':
nums.append(annonce.find_all('div', class_="inner")[0].contents[7].text)
elif annonce.find_all('div', class_="userinfo"):
if annonce.find_all('i', class_="icon-envelope")[1].parent.parent.text[0] == '0':
nums.append(annonce.find_all('i', class_="icon-envelope")[1].parent.parent.text)
except:
continue
sys.stdout.write("\r" + OKGREEN + "Avancement : " + str(len(nums)) + " / " + str(n) + ENDC)
sys.stdout.flush()
if len(nums) >= n:
break
print()
page += 1
if use_tor:
print(term.format("Arret de Tor.\n", term.Attr.BOLD))
kill_tor()
return nums[:n]
def save_file(links, file):
if file == sys.stdout:
f = sys.stdout
else:
f = open(file, 'w')
for link in links:
if not link:
continue
f.write(link + '\n')
if __name__ == "__main__":
nums = set(souk_ma_crawler(1, 500))
save_file(nums, "out")