【问题标题】:Regular Expression In Order To Identify Tor Domains正则表达式以识别 Tor 域
【发布时间】:2019-04-19 20:31:43
【问题描述】:

我正在开发一个通过 html 代码尝试抓取 Tor 域的抓取工具。但是我在想出一段代码来匹配 tor 域时遇到了麻烦。

Tor 域通常采用以下格式:

http://sitegoeshere.onion

https://sitegoeshere.onion

我只想匹配页面中包含的 URL,格式为 http://sitetexthere.onionhttps://sitehereitis.onion。这是在一堆可能不是 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)

【问题讨论】:

  • 匹配是什么意思?你只是想看看它是否以onion结尾?
  • 是的,我只想匹配页面中包含的 URL,格式为 sitetexthere.onionsitehereitis.onion。这是在一堆可能不是 url 的文本中。它应该只是拉出网址。
  • TOR 域是公钥的 base32 编码 SHA-1 散列的前半部分,来自带后缀“.onion”的 1024 位 RSA 密钥对。结果是 .onion 域名的长度为 16 个字符,并且只能包含小写字母 a 到 z 以及数字 2 到 7。source

标签: python regex python-3.x python-requests tor


【解决方案1】:

如果 URL 不匹配,regex.match 将返回 None

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")

【讨论】:

【解决方案2】:

正则表达式模式大多是标准的,所以,我会推荐你​​这个模式:

'.onion$'

反斜杠转义点,'$' 字符表示字符串的结尾。由于所有 url 都以 'http(s)://' 开头,因此无需将其包含在模式中。

【讨论】:

    【解决方案3】:

    假设这些取自 href 属性,您可以尝试使用 $ 以运算符结尾的属性 = 值选择器

    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"]')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 2015-01-23
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多