NoPaste

threads_regex

von TRex

SNIPPET_TEXT:
  1. import requests
  2. import re
  3. import sys
  4. from timeit import timeit
  5.  
  6.  
  7. # HTML des "Netzwerk"-Unterforums
  8. dfde = requests.get("https://debianforum.de/forum/viewforum.php?f=30").text
  9.  
  10.  
  11. def parse(html):
  12.     # (?:.*?) sind non-capturing groups mit soviel wie nötig matchenden Zeichen (non-greedy)
  13.    threadex = re.compile(r"<li class=.row.bg"
  14.                       r"(?:.*?)"
  15.                       r"(?:class=.topictitle.>)(?P<topictitle>[^<]+)(?:.*?)"
  16.                       r"(?:username.>)(?P<username>[^<]+)(?:</a> &raquo; )"
  17.                       r"(?:.*?)"
  18.                       r"(?P<date>[0-9][0-9.,: ]{18})"
  19.                       r"(?:.*?)"
  20.                       r"(?:posts.>)(?P<posts>[0-9]+)",
  21.                       re.S)
  22.     for thread in threadex.finditer(dfde):
  23.         yield "{topictitle};{date};{username};{posts}".format(**thread.groupdict())
  24.  
  25. if __name__ == "__main__":
  26.  
  27.     if "timeit" in sys.argv:
  28.         timing_results = timeit(lambda: parse(dfde))
  29.         print(timing_results)
  30.     else:
  31.         for thread in parse(dfde):
  32.             print(thread)

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN