2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Код для википедийского бота
Сообщение21.11.2018, 14:17 


21/05/16
4292
Аделаида
Решил создать бота для Википедии. Написал код:
код: [ скачать ] [ спрятать ]
Используется синтаксис Python
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. import pywikibot, requests
  4. def main(name):
  5.         site=pywikibot.Site()
  6.         page=pywikibot.Page(site, name)
  7.         text=page.text
  8.         textnew=[]
  9.         while True:
  10.                 try:
  11.                         index1=text.index("{{не переведено 5")
  12.                         try:
  13.                                 index2=text.index("{{нп5")
  14.                                 index=min(index1,index2)
  15.                         except:
  16.                                 index=index1
  17.                 except:
  18.                         try:
  19.                                 index2=text.index("{{нп5")
  20.                                 index=index2
  21.                         except:
  22.                                 break
  23.                 textnew.append([0, text[:index]])
  24.                 text=text[index:]
  25.                 index=text.index("}}")
  26.                 template=["не переведено 5"]
  27.                 vertical=-1
  28.                 for i in range(index):
  29.                         if text[i]=="|":
  30.                                 if vertical==-1:
  31.                                         vertical=i
  32.                                 else:
  33.                                         template.append(text[vertical+1:i])
  34.                                         vertical=i
  35.                 template.append(text[vertical+1:index])
  36.                 try:
  37.                         text=text[index+2:]
  38.                 except:
  39.                         text=""
  40.                 textnew.append(template)
  41.         textnew.append([0, text])
  42.         for q in range(len(textnew)):
  43.                 i=textnew[q]
  44.                 if i[0]!=0:
  45.                         if i[3]=="":
  46.                                 prefix="en"
  47.                         else:
  48.                                 prefix=i[3]
  49.                         if i[4]=="":
  50.                                 intername=name
  51.                         else:
  52.                                 intername=i[4]
  53.                         intername=intername.split()
  54.                         intername="_".join(intername)
  55.                         request="https://"+prefix+".wikipedia.org/w/api.php?action=query&titles="+intername+"&prop=langlinks&lllimit=500&format=json"
  56.                         try:
  57.                                 #json with interwikis
  58.                                 jwi=requests.get(request).json()
  59.                                 for i in jwi['query']['pages'].keys():
  60.                                         for j in jwi['query']['pages'][i]['langlinks']:
  61.                                                 if j['lang']=='ru':
  62.                                                         interwiki=j['*']
  63.                                 try:
  64.                                         inter=interwiki
  65.                                         if i[2]=="":
  66.                                                 textnew[q]=[0,"[["+i[1]+"|"+inter+"]]"]
  67.                                         else:
  68.                                                 textnew[q]=[0, "[["+i[2]+"|"+inter+"]]"
  69.                                 except:
  70.                                         pass
  71.                         except:
  72.                                 pass
  73.         text=""
  74.         for i in textnew:
  75.                 if i[0]==0:
  76.                         text+=i[1]
  77.                 else:
  78.                         text+="{{"+i[0]+"|"+i[1]+"|"+i[2]+"|"+i[3]+"|"+i[4]+"}}"
  79.         page.text=text
  80.         page.save(u"Проверено, не переведены ли ссылки.")
  81. if __name__=="__main__":
  82.         main(u"Участник:Well very well/Черновик")
  83.  

Почему он ломается на 69 строке?

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:18 
Заслуженный участник
Аватара пользователя


16/07/14
8342
Цюрих
Что значит "ломается"?

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:20 


21/05/16
4292
Аделаида
Выдает ошибку при запуске python pwb.py bot.py:
Traceback (most recent call last):
File "pwb.py", line 257, in <module>
if not main():
File "pwb.py", line 250, in main
run_python_file(filename, [filename] + args, argvu, file_package)
File "pwb.py", line 118, in run_python_file
exec(compile(source, filename, 'exec', dont_inherit=True),
File "./scripts/userscripts/interbot.py", line 69
except:
^
SyntaxError: invalid syntax
<type 'exceptions.SyntaxError'>
CRITICAL: Closing network session.

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:27 
Заслуженный участник
Аватара пользователя


16/07/14
8342
Цюрих
При синтаксических ошибках как правило часто надо смотреть и на предыдущие строчки. В вашем случае - внимательно посмотрите на 68ю.

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:28 


21/05/16
4292
Аделаида
А, я закрывающую скобку забыл... Спасибо!

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:29 
Заслуженный участник


06/07/11
5627
кран.набрать.грамота
kotenok gav в сообщении #1355625 писал(а):
SyntaxError: invalid syntax
Хотите заниматься программированием - английский таки придется выучить: https://translate.google.ru/#en/ru/invalid%20syntax
Синтаксис какой-то из команд неверный. Либо в той строке, либо вокруг, или со скобками напутали, или еще миллион причин (в общем случае).

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:30 


21/05/16
4292
Аделаида
Так я знаю, что значит SyntaxError: invalid syntax. Просто я не видел конкретное местонахождение ошибки.

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:37 
Заслуженный участник
Аватара пользователя


16/07/14
8342
Цюрих
Если непонятно, где именно ошибка - можно попробовать удалить часть соседних строк и проверить, останется ли она.

 Профиль  
                  
 
 Re: Код для википедийского бота
Сообщение21.11.2018, 14:38 


21/05/16
4292
Аделаида
Спасибо!

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group