私は現在Pythonの課題に取り組んでおり、レベル4に到達しています。ここを参照してください。Pythonを学習してから数か月しか経っていません。これまでのところ、2.xでPython3を学習しようとしています。このコードを使用する場合を除いて、Python2.xバージョンは次のとおりです。
import urllib, re
prefix = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="
findnothing = re.compile(r"nothing is (\d+)").search
nothing = '12345'
while True:
text = urllib.urlopen(prefix + nothing).read()
print text
match = findnothing(text)
if match:
nothing = match.group(1)
print " going to", nothing
else:
break
したがって、これを3に変換するには、次のように変更します。
import urllib.request, urllib.parse, urllib.error, re
prefix = "http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing="
findnothing = re.compile(r"nothing is (\d+)").search
nothing = '12345'
while True:
text = urllib.request.urlopen(prefix + nothing).read()
print(text)
match = findnothing(text)
if match:
nothing = match.group(1)
print(" going to", nothing)
else:
break
したがって、2.xバージョンを実行すると、正常に動作し、ループを通過し、URLをスクレイピングして最後に移動すると、次の出力が得られます。
and the next nothing is 72198
going to 72198
and the next nothing is 80992
going to 80992
and the next nothing is 8880
going to 8880 etc
3.xバージョンを実行すると、次の出力が得られます。
b'and the next nothing is 44827'
Traceback (most recent call last):
File "C:\Python32\lvl4.py", line 26, in <module>
match = findnothing(b"text")
TypeError: can't use a string pattern on a bytes-like object
したがって、この行でrをabに変更すると
findnothing = re.compile(b"nothing is (\d+)").search
私は得る:
b'and the next nothing is 44827'
going to b'44827'
Traceback (most recent call last):
File "C:\Python32\lvl4.py", line 24, in <module>
text = urllib.request.urlopen(prefix + nothing).read()
TypeError: Can't convert 'bytes' object to str implicitly
何か案は?
私はプログラミングにかなり慣れていないので、頭を悩ませないでください。
_bk201