Advertisement
Hellerick_Ferlibay

Getting a list of pages within a Mediawiki category

Jan 22nd, 2016
284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.58 KB | None | 0 0
  1. import re, urllib.parse, urllib.request
  2.  
  3. website = r'https://ru.wiktionary.org'
  4. categorylist = [
  5.     "Категория:Прилагательные, склонение 1*a",
  6.     "Категория:Прилагательные, склонение 1*a-",
  7.     "Категория:Прилагательные, склонение 1*a'",
  8.     "Категория:Прилагательные, склонение 1*a((1))",
  9.     "Категория:Прилагательные, склонение 1*a(1)",
  10.     "Категория:Прилагательные, склонение 1*a(1)-",
  11.     "Категория:Прилагательные, склонение 1*a(2)",
  12.     "Категория:Прилагательные, склонение 1*a/b",
  13.     "Категория:Прилагательные, склонение 1*a/b(2)",
  14.     "Категория:Прилагательные, склонение 1*a/b~",
  15.     "Категория:Прилагательные, склонение 1*a/c",
  16.     "Категория:Прилагательные, склонение 1*a/c'",
  17.     "Категория:Прилагательные, склонение 1*a/c'^",
  18.     "Категория:Прилагательные, склонение 1*a/c'~",
  19.     'Категория:Прилагательные, склонение 1*a/c"',
  20.     "Категория:Прилагательные, склонение 1*a~",
  21.     "Категория:Прилагательные, склонение 1*b",
  22.     "Категория:Прилагательные, склонение 1*b/c'",
  23.     'Категория:Прилагательные, склонение 1*b/c"',
  24.     "Категория:Прилагательные, склонение 1*b^",
  25.     "Категория:Прилагательные, склонение 1*b~",
  26.     "Категория:Прилагательные, склонение 1*а",
  27.     "Категория:Прилагательные, склонение 1a",
  28.     "Категория:Прилагательные, склонение 1a?7",
  29.     "Категория:Прилагательные, склонение 1a'",
  30.     "Категория:Прилагательные, склонение 1a'~",
  31.     "Категория:Прилагательные, склонение 1a(1)",
  32.     "Категория:Прилагательные, склонение 1a/b",
  33.     "Категория:Прилагательные, склонение 1a/b(2)",
  34.     "Категория:Прилагательные, склонение 1a/c",
  35.     "Категория:Прилагательные, склонение 1a/c-ё",
  36.     "Категория:Прилагательные, склонение 1a/c'",
  37.     "Категория:Прилагательные, склонение 1a/c'^",
  38.     "Категория:Прилагательные, склонение 1a/c'~",
  39.     'Категория:Прилагательные, склонение 1a/c"',
  40.     "Категория:Прилагательные, склонение 1a/c~",
  41.     "Категория:Прилагательные, склонение 1a^",
  42.     "Категория:Прилагательные, склонение 1b",
  43.     "Категория:Прилагательные, склонение 1b?",
  44.     "Категория:Прилагательные, склонение 1b/c",
  45.     "Категория:Прилагательные, склонение 1b/c'",
  46.     "Категория:Прилагательные, склонение 1b/c'~",
  47.     "Категория:Прилагательные, склонение 1b/c~",
  48.     "Категория:Прилагательные, склонение 1b/c~^",
  49.     "Категория:Прилагательные, склонение 1bX",
  50.     "Категория:Прилагательные, склонение 2*a",
  51.     "Категория:Прилагательные, склонение 2*a-",
  52.     "Категория:Прилагательные, склонение 2*a^",
  53.     "Категория:Прилагательные, склонение 2a",
  54.     "Категория:Прилагательные, склонение 2a/c",
  55.     "Категория:Прилагательные, склонение 3*a",
  56.     "Категория:Прилагательные, склонение 3*a'",
  57.     "Категория:Прилагательные, склонение 3*a/b",
  58.     "Категория:Прилагательные, склонение 3*a/c",
  59.     "Категория:Прилагательные, склонение 3*a/c'",
  60.     "Категория:Прилагательные, склонение 3*a/c'^",
  61.     'Категория:Прилагательные, склонение 3*a/c"',
  62.     "Категория:Прилагательные, склонение 3*a/c^",
  63.     "Категория:Прилагательные, склонение 3*a~",
  64.     "Категория:Прилагательные, склонение 3*aX~",
  65.     "Категория:Прилагательные, склонение 3a",
  66.     "Категория:Прилагательные, склонение 3a'",
  67.     "Категория:Прилагательные, склонение 3a'~",
  68.     "Категория:Прилагательные, склонение 3a/c",
  69.     "Категория:Прилагательные, склонение 3a/c'",
  70.     'Категория:Прилагательные, склонение 3a/c"',
  71.     'Категория:Прилагательные, склонение 3a/c"^',
  72.     'Категория:Прилагательные, склонение 3a/c"~',
  73.     "Категория:Прилагательные, склонение 3a^",
  74.     "Категория:Прилагательные, склонение 3a~",
  75.     "Категория:Прилагательные, склонение 3aX~",
  76.     "Категория:Прилагательные, склонение 3b",
  77.     "Категория:Прилагательные, склонение 3b/c",
  78.     "Категория:Прилагательные, склонение 3b/c'",
  79.     "Категория:Прилагательные, склонение 3b/c'~",
  80.     "Категория:Прилагательные, склонение 3b/c~",
  81.     "Категория:Прилагательные, склонение 3bX~",
  82.     "Категория:Прилагательные, склонение 4a",
  83.     "Категория:Прилагательные, склонение 4a-ся",
  84.     "Категория:Прилагательные, склонение 4a/b",
  85.     "Категория:Прилагательные, склонение 4a/b'",
  86.     "Категория:Прилагательные, склонение 4a/b~",
  87.     "Категория:Прилагательные, склонение 4a/c",
  88.     "Категория:Прилагательные, склонение 4aX",
  89.     "Категория:Прилагательные, склонение 4aX~",
  90.     "Категория:Прилагательные, склонение 4b",
  91.     "Категория:Прилагательные, склонение 4b~^",
  92.     "Категория:Прилагательные, склонение 4bX",
  93.     "Категория:Прилагательные, склонение 5a",
  94.     "Категория:Прилагательные, склонение 6*a",
  95.     "Категория:Прилагательные, склонение 6a",
  96.     ]
  97.  
  98. allres = []
  99.  
  100. for category in categorylist:
  101.     counter = 0
  102.     goon = True
  103.     while goon:
  104.         counter += 1
  105.         query = website+r'/w/api.php?action=query&format=json&generator=categorymembers&gcmlimit=500&gcmprop=title&gcmtitle='+urllib.parse.quote(category)
  106.         if counter > 1:
  107.             query = query+'&gcmcontinue='+cont
  108.         s = urllib.request.urlopen(query).read().decode('ascii')
  109.         if s == '{"batchcomplete":""}':
  110.             goon = False
  111.         else:
  112.             try:
  113.                 cont = re.search('\{"gcmcontinue":"page\|[0-9a-f|]+","continue":"gcmcontinue\|\|"\}', s).group(0)
  114.                 cont = re.search('page\|[0-9a-f|]+', s).group(0)
  115.             except AttributeError:
  116.                 goon = False    
  117.             res = re.split(r'("title":".*?")', s)
  118.             res = [res[i] for i in range(len(res)) if i%2!=0]
  119.             res = [category + '\t' +eval(re.sub(r'.+:(".*")',r'\1',i)) for i in res]
  120.             print (res[0], len(s))
  121.             #print (res)
  122.             allres = allres+res
  123.  
  124. allres = '\n'.join(allres)
  125.  
  126. with open('ListPagesInMediawikiCategory-Result.txt', mode='wt', encoding='utf-8') as f:
  127.     f.write(allres)
  128.     print ('Output text length', len(allres), 'characters.')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement