Регулярное выражение для идентификации доменов Tor - PullRequest
0 голосов
/ 19 апреля 2019

Я работаю над шабером, который просматривает HTML-код и пытается очистить домены. Однако я не могу придумать кусок кода для соответствия доменам.

Домены Tor обычно имеют формат:

http://sitegoeshere.onion

или

https://sitegoeshere.onion

Я просто хочу сопоставить URL-адреса, которые будут содержаться на странице, в формате http://sitetexthere.onion или https://sitehereitis.onion. Это текст, который не может быть URL-адресом. Нужно просто вытащить URL.

Я уверен, что есть легкая или хорошая часть регулярного выражения, которая сделает это, но я не смог найти ее. Если кто-то в состоянии связать один или быстро раскрутить один, это было бы полезно. Большое спасибо.

    session = requests.session()
    session.proxies = {}
    session.proxies['http'] = 'socks5h://localhost:9050'
    session.proxies['https'] = 'socks5h://localhost:9050'
    r = session.get('http://facebookcorewwwi.onion')
    print(r.text)

Ответы [ 3 ]

1 голос
/ 19 апреля 2019

regex.match вернет None, если URL не совпадает.

import re

regex = re.compile(r"^https?\:\/\/[\w\-\.]+\.onion")

url = 'https://sitegoes-here.onion'

if regex.match(url):
  print('Valid Tor Domain!')
else:
  print('Invalid Tor Domain!')

Для необязательных http (s):

regex = re.compile(r"^(?:https?\:\/\/)?[\w\-\.]+\.onion")
0 голосов
/ 20 апреля 2019

Предполагая, что они взяты из атрибутов href, вы можете попробовать селектор attribute = value с $, заканчивающимся оператором

from bs4 import BeautifulSoup as bs
import requests

resp = requests.get("https://en.wikipedia.org/wiki/Tor_(anonymity_network)")  #example url. Replace with yours.
soup = bs(resp.text,'lxml')
links = [item['href'] for item in soup.select('[href$=".onion"]')]
0 голосов
/ 20 апреля 2019

Шаблоны регулярных выражений в основном стандартные, поэтому я бы порекомендовал вам этот шаблон:

'лук $'

Обратная косая черта экранирует точку, а символ «$» означает конец строки. Так как все URL начинаются с 'http (s): //', нет необходимости включать его в шаблон.

...