如何解决试图找出 IP 的 python 程序中的无效语法错误
import re
import sys
import json
import GeoIP
import urllib
import string
import requests
gi = GeoIP.open("GeoLiteCity.dat",GeoIP.GEOIP STANDARD)
r = requests.get('http://lichess.org/stream',stream=True)
buff = ''
pattern = re.compile(sys.argv[1] + '.{30}')
for content in r.iter content():
if content:
buff = buff + content
if len(buff) > 1000:
result keys = re.findall(pattern,buff)
for el in result keys:
result = string.split(el)
print result[0],result[1],result[2][:-8],gi.record by addr(result[2][:-8])['country name'],gi.record by addr(result[2][:-8])['region name'],gi.record by addr(result[2][:-8])['city']
buff = buff[-30:]
编译器告诉我在第 9 行有无效的语法,它说 STANDARD。
我在名为 lichess.org 的国际象棋网站上查找了代码,以根据游戏的 ID 找出用户的 IP 地址。鉴于此代码是 7 年前发布的,并且 lichess 更改了某些内容,因此我认为需要进行一些更改。
我发现这个线程的 OP 也给出了这个建议:
用法:getip.py owlc08je
其中 getip.py 您的脚本名称,“owlc08je” - 游戏 ID。如果有人在这个游戏中移动,他的 ip、国家和城市会打印到控制台。
然而,它不起作用。
提前致谢
带下划线和更改的编辑代码:
import re
import sys
import json
import GeoIP
import urllib
import string
import requests
gi = GeoIP.open("GeoLiteCity.dat",GeoIP.GEOIP_STANDARD)
r = requests.get('http://lichess.org/stream',stream=True)
buff = ''
pattern = re.compile(sys.argv[1] + '.{30}')
for content in r.iter_content():
if content:
buff = buff + content
if len(buff) > 1000:
result_keys = re.findall(pattern,buff)
for el in result_keys:
result = string.split(el)
print(result[0],gi.record_by_addr(result[2][:-8])['country name'],gi.record by addr(result[2][:-8])['city'])
buff = buff[-30:]
解决方法
我认为您在 GEOIP 和 STANDARD 之间缺少下划线。
用这个替换第 9 行应该可以解决问题:
gi = GeoIP.open("GeoLiteCity.dat",GeoIP.GEOIP_STANDARD)
编辑:
如其中一条评论所述,如果还有其他地方省略了下划线;这应该可以解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。