Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #==== Поиск в строке ==== https://pythonru.com/osnovy/modul-re-dlja-reguljarnyh-vyrazhenij-v-python
- import re
- title = "Error 404. Page not found Erra 555 3333"
- exemple = re.findall( r'[0-9]{1,}', title, re.M|re.I)
- if exemple:
- print(exemple)
- else:
- print("Нет совпадений!")
- # Результат: ['404', '555', '3333']
- #==== Замена в строке ====
- import re
- tel = '+7(986)244-32-11'
- new = re.sub(r'\+|\(|\)|\-', "", tel)
- print("Новый телефон:", new)
- # Результат: 79862443211
- #==== Удаление спецсимволов HTML из Title и Description ====
- import re
- tel = 'Тест "  '
- new = re.sub(r'\&\#[0-9]{1,}\;|\"\;', "", tel)
- print(new)
- #==== Открытие текстового файла в нужной кодировке ====
- with open('iam.txt', 'r', encoding="UTF-8") as f:
- content = f.read()
- print(content)
- #==== Построчное чтение файла ====
- with open("sites.txt", encoding="UTF-8") as file_in:
- lines = file_in.readlines()
- print(lines)
- #==== Прочитать и переложить в другой файл ====
- with open("sites.txt", encoding="UTF-8") as file_in:
- lines = file_in.readlines()
- print(lines)
- #my_list = [1, 2, 3, 4, 5]
- f = open('result.txt','a')
- for number in lines:
- print(number)
- number = str(number)
- f.write(number)
- f.close()
- #==== Приведение емайлов к нижнему регистру ====
- text = "[email protected]"
- text = text.lower()
- print(text)
- #==== Первый парсер всё работает ==== Гайд: https://habr.com/ru/companies/selectel/articles/754674/
- # импортируем модуль
- import requests
- st_accept = "text/html" # говорим веб-серверу,
- # что хотим получить html
- # имитируем подключение через браузер Mozilla на macOS
- 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"
- # формируем хеш заголовков
- headers = {
- "Accept": st_accept,
- "User-Agent": st_useragent
- }
- # отправляем запрос с заголовками по нужному адресу
- req = requests.get("https://site.ru/", headers)
- # считываем текст HTML-документа
- src = req.text
- print(src)
- #==== Итоговый парсер телефонов ====
- tester = '<meta charset="utf-8" /><title>Скупка и удаление катализаторов в Уфе</title><meta http-equiv="X-UA-Compatible" content="IE=edge" />'
- descrip = '<meta name="description" content="Удаление скупка"/>'
- # Получаем title
- exemple = getTitle(src)
- # Получаем description
- res_des = getDescription(src)
- tester = '''
- <a href="tel:88002229102">
- <a href="tel:+78002229102">
- <a href="tel:+79174422102">
- <a href="tel:+7 917 442 21 02">
- <a href="tel:+7(917)442-21-02">
- <i class="fas fa-phone-square">+7 917 46 49 100</i>
- <i class="fas fa-phone-square"> 8 (831) 256-78-80 </i>
- <i class="fas fa-phone-square"> 8 ( 800 ) 256-78-80 </i>
- <i class="fas fa-phone-square"> 8 (831) 256 78 80 </i>
- <i class="fas fa-phone-square">+79994649100</i>
- '''
- #Забираем гарантированные телефоны
- tel = re.findall( r'href=\"tel:([0-9\+\s\-\(\)]{1,})', tester, re.M|re.I)
- if tel:
- #print(tel)
- time.sleep(0.1)
- else:
- print("Нет description")
- #Забираем простые текстовые телефоны на +7
- tel2 = re.findall( r'\+7[0-9\s\-\(\)]{1,}', tester, re.M|re.I)
- #Забираем телефоны на 8 (ххх)
- tel3 = re.findall( r'8[\s]{0,}\([0-9\s]{2,}\)[0-9\s\-]{3,}', tester, re.M|re.I)
- #print(tel2)
- #print(tel3)
- tel4 = tel2 + tel3
- print(tel4)
- #Создаём набор перед перебором списка
- output = set()
- for number in tel4:
- #Чистим номер
- number = re.sub(r'[^0-9]', "", str(number))
- #Добавляем очищенный номер в набор
- output.add(number)
- print(output)
- #==== Чистильщик первая версия ====
- def cleaner(var):
- var = re.sub(r'<style>[^<]{1,}<\/style>', '', str(var))
- #var = re.sub(r'<script>[^<]{1,}<\/script>', '', str(var))
- #var = re.sub(r'<script[\s\t]{1,}src[^<]{1,}<\/script>', '', str(var))
- var = re.sub(r'<path[^>]{1,}>', '', str(var))
- var = re.sub(r'<feFunc[^>]{1,}>', '', str(var))
- #var = re.sub(r'<label[^|]{1,}<\/label>', '', str(var))
- var = re.sub(r'[\"\']{1,}http[^\"\']{1,}[\"\']{1,}', '', str(var))
- var = re.sub(r'data\-[^>]{1,}>', '', str(var))
- var = re.sub(r'css\?[^\"]{1,}\"', "css\"", str(var))
- var = re.sub(r'{[^\}]{1,}\}', "", str(var))
- var = re.sub(r'&[#]{0,}[a-z0-9]{1,};', " ", str(var))
- #var = re.sub(r'<input[^>]{0,}>', " ", str(var)) #input
- var = re.sub(r'<img[^>]{0,}>', " ", str(var)) #img
- #var = re.sub(r'<svg[^>]{0,}>', " ", str(var)) #img
- #var = re.sub(r'<button[^>]{0,}>', " ", str(var)) #img
- var = re.sub(r'<span[^>]{0,}>|<\/span>', " ", str(var)) #span
- var = re.sub(r'imgfield=\"[^\"]{0,}\"', " ", str(var)) #id чтоб номер с тел не спутать
- var = re.sub(r'imgfield=\'[^\"]{0,}\'', " ", str(var)) #id чтоб номер с тел не спутать
- var = re.sub(r'id=\"[^\"]{0,}\"', " ", str(var)) #id чтоб номер с тел не спутать
- var = re.sub(r'id=\'[^\"]{0,}\'', " ", str(var)) #id чтоб номер с тел не спутать
- var = re.sub(r'field=\"[^\"]{0,}\"', " ", str(var)) #id чтоб номер с тел не спутать
- var = re.sub(r'field=\'[^\"]{0,}\'', " ", str(var)) #id чтоб номер с тел не спутать
- var = re.sub(r'class=\"[^\"]{0,}\"', "", str(var)) #class
- var = re.sub(r'class=\'[^\"]{0,}\'', "", str(var)) #class
- var = re.sub(r'name=\"[^\"]{0,}\"', "", str(var)) #class
- var = re.sub(r'name=\'[^\"]{0,}\'', "", str(var)) #class
- var = re.sub(r'type=\"[^\"]{0,}\"', "", str(var)) #type
- var = re.sub(r'type=\'[^\"]{0,}\'', "", str(var)) #type
- var = re.sub(r'src=\"[^\"]{0,}\"', "", str(var)) #src
- var = re.sub(r'src=\'[^\"]{0,}\'', "", str(var)) #src
- var = re.sub(r'style=\"[^\"]{0,}\"', "", str(var)) #style
- var = re.sub(r'style=\'[^\"]{0,}\'', "", str(var)) #style
- var = re.sub(r'[\s\n]{1,}>', ">", str(var)) #<div > на <div>
- var = re.sub(r'<br\s\/>|<br>|<strong>|<\/strong>|<b>|<\/b>|<i>|<\/i>', "", str(var)) #красота
- return var
- #==== Была единая функция с телефоном ====
- def getPhone(html):
- #Забираем гарантированные телефоны
- t1 = re.findall( r'href=\"tel:([0-9\+\s\-\(\)]{1,})', html, re.M|re.I)
- #Забираем простые текстовые телефоны на +7
- t2 = re.findall( r'\+[\s]{0,}7[0-9\s\-\(\)]{1,}', html, re.M|re.I)
- #Забираем телефоны на 8 (ххх)
- t3 = re.findall( r'8[\s]{0,}\([0-9\s]{2,}\)[0-9\s\-]{3,}', html, re.M|re.I)
- #Забираем телефоны на 8 без скобок +ровно 10 цифр
- t4 = re.findall( r'[78]{1,}[0-9]{10}[^0-9]{1}', html, re.M|re.I)
- #Ещё нашёл вариант который не забирался
- t5 = re.findall( r'[78]{1,}[\s\-]{0,}9[0-9\-]{9,}', html, re.M|re.I)
- t6 = re.findall( r'\([0-9]{3,}\)[0-9\s\-]{1,}', html, re.M|re.I)
- t7 = re.findall( r'\d\s\d{3}\s\d{3}\s\d{2}\s\d{2}', html, re.M|re.I)
- #medium6 = str('7')+str(t6)
- #t6 = [medium6]
- #Объединяем списки
- tel = t1 + t2 + t3 + t4 + t5 + t6 + t7
- #print(tel)
- #Создаём набор перед перебором списка
- output = set()
- for number in tel:
- #Чистим номер
- number = re.sub(r'[^0-9]', "", str(number))
- #Не может быть такого телефона
- if number=='79999999999':
- continue
- if number=='88888888888':
- continue
- #Если телефонный номер менее 10 символов то он нам не подходит, это не мобильный
- if len(number) < 10:
- continue
- #Если телефонный номер более 10 символов то это тоже ошибка
- if len(number) > 11:
- continue
- #Добавляем очищенный номер в набор
- output.add(number)
- return output
Advertisement
Add Comment
Please, Sign In to add comment