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
9166
Цюрих
Что значит "ломается"?

 Профиль  
                  
 
 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
9166
Цюрих
При синтаксических ошибках как правило часто надо смотреть и на предыдущие строчки. В вашем случае - внимательно посмотрите на 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
9166
Цюрих
Если непонятно, где именно ошибка - можно попробовать удалить часть соседних строк и проверить, останется ли она.

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


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

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

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



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

Сейчас этот форум просматривают: worm2


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

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