2014-09-19 2 views
0

Для этого кода я конвертирую рабочий веб-браузер python с 2,7 до 3,4. Я сделал некоторые изменения, но я все еще получаю ошибки при его запуске:Преобразование python webcrawler в 3.4 из 2.7

Traceback (most recent call last): 
    File "Z:\testCrawler.py", line 11, in <module> 
    for i in re.findall('''href=["'](.[^"']+)["']''', urllib.request.urlopen(myurl).read(), re.I): 
    File "C:\Python34\lib\re.py", line 206, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: can't use a string pattern on a bytes-like object 

Это сам код, пожалуйста, скажите мне, если вы видите, что ошибки синтаксиса.

#! C:\python34 

import re 
import urllib.request 

textfile = open('depth_1.txt','wt') 
print ("Enter the URL you wish to crawl..") 
print ('Usage - "http://phocks.org/stumble/creepy/" <-- With the double quotes') 
myurl = input("@> ") 
for i in re.findall('''href=["'](.[^"']+)["']''', urllib.request.urlopen(myurl).read(), re.I): 
     print (i) 
     for ee in re.findall('''href=["'](.[^"']+)["']''', urllib.request.urlopen(i).read(), re.I): 
       print (ee) 
       textfile.write(ee+'\n') 
textfile.close() 
+0

вам нужно декодировать ответ от 'read' в' str'. – roippi

+2

Хотя пожалуйста - используйте парсер HTML для разбора html, а не для регулярного выражения. – roippi

ответ

0

Изменить

urllib.request.urlopen(myurl).read() 

к, например

urllib.request.urlopen(myurl).read().decode('utf-8') 

Что здесь происходит .read() возвращение bytes вместо str, как это было в Python 2.7, поэтому он должен быть расшифрованы с помощью некоторых кодирование.

Смежные вопросы