zero50x

Python 1

Jun 9th, 2025 (edited)
886
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.55 KB | None | 0 0
  1. #==== Поиск в строке ==== https://pythonru.com/osnovy/modul-re-dlja-reguljarnyh-vyrazhenij-v-python
  2.  
  3. import re
  4. title = "Error 404. Page not found Erra 555 3333"
  5. exemple = re.findall( r'[0-9]{1,}', title, re.M|re.I)
  6.  
  7. if exemple:
  8.    print(exemple)
  9. else:
  10.    print("Нет совпадений!")
  11. # Результат: ['404', '555', '3333']
  12.  
  13.  
  14. #==== Замена в строке ====
  15.  
  16. import re
  17. tel = '+7(986)244-32-11'
  18. new = re.sub(r'\+|\(|\)|\-', "", tel)
  19. print("Новый телефон:", new)
  20. #  Результат: 79862443211
  21.  
  22. #==== Удаление спецсимволов HTML из Title и Description ====
  23.  
  24. import re
  25. tel = 'Тест "  '
  26. new = re.sub(r'\&\#[0-9]{1,}\;|\&quot\;', "", tel)
  27. print(new)
  28.  
  29. #==== Открытие текстового файла в нужной кодировке ====
  30.  
  31. with open('iam.txt', 'r', encoding="UTF-8") as f:
  32.    content = f.read()
  33.    print(content)
  34.  
  35. #==== Построчное чтение файла ====
  36.  
  37. with open("sites.txt", encoding="UTF-8") as file_in:
  38.     lines = file_in.readlines()
  39.     print(lines)
  40.  
  41. #==== Прочитать и переложить в другой файл ====
  42.  
  43. with open("sites.txt", encoding="UTF-8") as file_in:
  44.     lines = file_in.readlines()
  45.     print(lines)
  46.  
  47. #my_list = [1, 2, 3, 4, 5]
  48.  
  49. f = open('result.txt','a')
  50.  
  51. for number in lines:
  52.     print(number)
  53.     number = str(number)
  54.     f.write(number)
  55.  
  56. f.close()
  57.  
  58. #==== Приведение емайлов к нижнему регистру ====
  59.  
  60. text = text.lower()
  61. print(text)
  62.  
  63.  
  64.  
  65. #==== Первый парсер всё работает ==== Гайд: https://habr.com/ru/companies/selectel/articles/754674/
  66.  
  67. # импортируем модуль
  68. import requests
  69.  
  70. st_accept = "text/html" # говорим веб-серверу,
  71.                         # что хотим получить html
  72. # имитируем подключение через браузер Mozilla на macOS
  73. st_useragent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_3_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15"
  74. # формируем хеш заголовков
  75. headers = {
  76.    "Accept": st_accept,
  77.    "User-Agent": st_useragent
  78. }
  79.  
  80. # отправляем запрос с заголовками по нужному адресу
  81. req = requests.get("https://site.ru/", headers)
  82. # считываем текст HTML-документа
  83. src = req.text
  84. print(src)
  85.  
  86.  
  87.  
  88. #==== Итоговый парсер телефонов ====
  89.  
  90. tester = '<meta charset="utf-8" /><title>Скупка и удаление катализаторов в Уфе</title><meta http-equiv="X-UA-Compatible" content="IE=edge" />'
  91. descrip = '<meta name="description" content="Удаление скупка"/>'
  92.  
  93.  
  94.  
  95. # Получаем title
  96. exemple = getTitle(src)
  97. # Получаем description
  98. res_des = getDescription(src)
  99.  
  100. tester = '''
  101. <a href="tel:88002229102">
  102. <a href="tel:+78002229102">
  103. <a href="tel:+79174422102">
  104. <a href="tel:+7 917 442 21 02">
  105. <a href="tel:+7(917)442-21-02">
  106. <i class="fas fa-phone-square">+7 917 46 49 100</i>
  107. <i class="fas fa-phone-square"> 8 (831) 256-78-80 </i>
  108. <i class="fas fa-phone-square"> 8 ( 800 ) 256-78-80 </i>
  109. <i class="fas fa-phone-square"> 8 (831) 256 78 80 </i>
  110. <i class="fas fa-phone-square">+79994649100</i>
  111. '''
  112.  
  113. #Забираем гарантированные телефоны
  114. tel = re.findall( r'href=\"tel:([0-9\+\s\-\(\)]{1,})', tester, re.M|re.I)
  115.  
  116. if tel:
  117.    #print(tel)
  118.    time.sleep(0.1)
  119. else:
  120.    print("Нет description")
  121.  
  122. #Забираем простые текстовые телефоны на +7
  123. tel2 = re.findall( r'\+7[0-9\s\-\(\)]{1,}', tester, re.M|re.I)
  124. #Забираем телефоны на 8 (ххх)
  125. tel3 = re.findall( r'8[\s]{0,}\([0-9\s]{2,}\)[0-9\s\-]{3,}', tester, re.M|re.I)
  126.  
  127. #print(tel2)
  128. #print(tel3)
  129.  
  130. tel4 = tel2 + tel3
  131.  
  132. print(tel4)
  133.  
  134. #Создаём набор перед перебором списка
  135. output = set()
  136.  
  137. for number in tel4:
  138.     #Чистим номер
  139.     number = re.sub(r'[^0-9]', "", str(number))
  140.     #Добавляем очищенный номер в набор
  141.     output.add(number)
  142.  
  143. print(output)
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152. #==== Чистильщик первая версия ====
  153.  
  154.  
  155. def cleaner(var):
  156.    var = re.sub(r'<style>[^<]{1,}<\/style>', '', str(var))
  157.    #var = re.sub(r'<script>[^<]{1,}<\/script>', '', str(var))
  158.    #var = re.sub(r'<script[\s\t]{1,}src[^<]{1,}<\/script>', '', str(var))
  159.    var = re.sub(r'<path[^>]{1,}>', '', str(var))
  160.    var = re.sub(r'<feFunc[^>]{1,}>', '', str(var))
  161.    #var = re.sub(r'<label[^|]{1,}<\/label>', '', str(var))
  162.    var = re.sub(r'[\"\']{1,}http[^\"\']{1,}[\"\']{1,}', '', str(var))
  163.    var = re.sub(r'data\-[^>]{1,}>', '', str(var))
  164.    var = re.sub(r'css\?[^\"]{1,}\"', "css\"", str(var))
  165.    var = re.sub(r'{[^\}]{1,}\}', "", str(var))
  166.    var = re.sub(r'&[#]{0,}[a-z0-9]{1,};', " ", str(var))
  167.    #var = re.sub(r'<input[^>]{0,}>', " ", str(var)) #input
  168.    var = re.sub(r'<img[^>]{0,}>', " ", str(var)) #img
  169.    #var = re.sub(r'<svg[^>]{0,}>', " ", str(var)) #img
  170.    #var = re.sub(r'<button[^>]{0,}>', " ", str(var)) #img
  171.    var = re.sub(r'<span[^>]{0,}>|<\/span>', " ", str(var)) #span
  172.    var = re.sub(r'imgfield=\"[^\"]{0,}\"', " ", str(var)) #id чтоб номер с тел не спутать
  173.    var = re.sub(r'imgfield=\'[^\"]{0,}\'', " ", str(var)) #id чтоб номер с тел не спутать
  174.    var = re.sub(r'id=\"[^\"]{0,}\"', " ", str(var)) #id чтоб номер с тел не спутать
  175.    var = re.sub(r'id=\'[^\"]{0,}\'', " ", str(var)) #id чтоб номер с тел не спутать
  176.    var = re.sub(r'field=\"[^\"]{0,}\"', " ", str(var)) #id чтоб номер с тел не спутать
  177.    var = re.sub(r'field=\'[^\"]{0,}\'', " ", str(var)) #id чтоб номер с тел не спутать
  178.    var = re.sub(r'class=\"[^\"]{0,}\"', "", str(var)) #class
  179.    var = re.sub(r'class=\'[^\"]{0,}\'', "", str(var)) #class
  180.    var = re.sub(r'name=\"[^\"]{0,}\"', "", str(var)) #class
  181.    var = re.sub(r'name=\'[^\"]{0,}\'', "", str(var)) #class
  182.    var = re.sub(r'type=\"[^\"]{0,}\"', "", str(var)) #type
  183.    var = re.sub(r'type=\'[^\"]{0,}\'', "", str(var)) #type
  184.    var = re.sub(r'src=\"[^\"]{0,}\"', "", str(var)) #src
  185.    var = re.sub(r'src=\'[^\"]{0,}\'', "", str(var)) #src
  186.    var = re.sub(r'style=\"[^\"]{0,}\"', "", str(var)) #style
  187.    var = re.sub(r'style=\'[^\"]{0,}\'', "", str(var)) #style
  188.    var = re.sub(r'[\s\n]{1,}>', ">", str(var)) #<div  > на <div>
  189.    var = re.sub(r'<br\s\/>|<br>|<strong>|<\/strong>|<b>|<\/b>|<i>|<\/i>', "", str(var)) #красота
  190.    return var
  191.  
  192.  
  193.  
  194. #==== Была единая функция с телефоном ====
  195.  
  196. def getPhone(html):
  197.    #Забираем гарантированные телефоны
  198.    t1 = re.findall( r'href=\"tel:([0-9\+\s\-\(\)]{1,})', html, re.M|re.I)
  199.    #Забираем простые текстовые телефоны на +7
  200.    t2 = re.findall( r'\+[\s]{0,}7[0-9\s\-\(\)]{1,}', html, re.M|re.I)
  201.    #Забираем телефоны на 8 (ххх)
  202.    t3 = re.findall( r'8[\s]{0,}\([0-9\s]{2,}\)[0-9\s\-]{3,}', html, re.M|re.I)
  203.    #Забираем телефоны на 8 без скобок +ровно 10 цифр
  204.    t4 = re.findall( r'[78]{1,}[0-9]{10}[^0-9]{1}', html, re.M|re.I)
  205.    #Ещё нашёл вариант который не забирался
  206.    t5 = re.findall( r'[78]{1,}[\s\-]{0,}9[0-9\-]{9,}', html, re.M|re.I)
  207.    t6 = re.findall( r'\([0-9]{3,}\)[0-9\s\-]{1,}', html, re.M|re.I)
  208.    t7 = re.findall( r'\d\s\d{3}\s\d{3}\s\d{2}\s\d{2}', html, re.M|re.I)
  209.    #medium6 = str('7')+str(t6)
  210.    #t6 = [medium6]
  211.    #Объединяем списки
  212.  
  213.    tel = t1 + t2 + t3 + t4 + t5 + t6 + t7
  214.    #print(tel)
  215.  
  216.    #Создаём набор перед перебором списка
  217.    output = set()
  218.  
  219.    for number in tel:
  220.       #Чистим номер
  221.       number = re.sub(r'[^0-9]', "", str(number))
  222.       #Не может быть такого телефона
  223.       if number=='79999999999':
  224.          continue
  225.       if number=='88888888888':
  226.          continue
  227.       #Если телефонный номер менее 10 символов то он нам не подходит, это не мобильный
  228.       if len(number) < 10:
  229.          continue
  230.       #Если телефонный номер более 10 символов то это тоже ошибка
  231.       if len(number) > 11:
  232.          continue
  233.       #Добавляем очищенный номер в набор
  234.       output.add(number)
  235.    return output
Advertisement
Add Comment
Please, Sign In to add comment