2015-06-21 11 views
30

में बाइट्स जैसी ऑब्जेक्ट पर स्ट्रिंग पैटर्न का उपयोग नहीं कर सकता है, मैं सीखने की कोशिश कर रहा हूं कि पृष्ठ से यूआरएल स्वचालित रूप से कैसे प्राप्त करें। निम्नलिखित कोड में मैं वेबपृष्ठ का शीर्षक प्राप्त करने के लिए कोशिश कर रहा हूँ:पायथन 3.3 टाइपरर: re.findall()

import urllib.request 
import re 

url = "http://www.google.com" 
regex = '<title>(,+?)</title>' 
pattern = re.compile(regex) 

with urllib.request.urlopen(url) as response: 
    html = response.read() 

title = re.findall(pattern, html) 
print(title) 

और मैं इस अप्रत्याशित त्रुटि मिलती है:

Traceback (most recent call last): 
    File "path\to\file\Crawler.py", line 11, in <module> 
    title = re.findall(pattern, html) 
    File "C:\Python33\lib\re.py", line 201, in findall 
    return _compile(pattern, flags).findall(string) 
TypeError: can't use a string pattern on a bytes-like object 

क्या मैं गलत कर रहा हूँ?

धन्यवाद!

+0

की [एक अजगर स्ट्रिंग के लिए बाइट्स कन्वर्ट] (http://stackoverflow.com/questions/606191/convert-bytes-to-a-python-string) – gnat

उत्तर

53

आप .decode का उपयोग कर एक स्ट्रिंग में एचटीएमएल (एक बाइट-जैसी ऑब्जेक्ट) को कन्वर्ट करना चाहते हैं, उदा। html = response.read().decode('utf-8')

Convert bytes to a Python String

+3

मैं देख रहा हूँ संभव डुप्लिकेट देखें। ओह यह पायथन 2.7 में नहीं हुआ था। धन्यवाद! –

संबंधित मुद्दे