Python web-scraping错误 - TypeError:不能在类字节对象上使用字符串模式

时间:2014-06-24 14:52:58

标签: python-3.x web-scraping scraper findall

我想建立一个网络刮刀。目前,我正在学习Python。这是非常基础!

Python代码

import urllib.request
import re

htmlfile = urllib.request.urlopen("http://basketball.realgm.com/")

htmltext = htmlfile.read()
title = re.findall('<title>(.*)</title>', htmltext)

print (htmltext)

错误:

  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

2 个答案:

答案 0 :(得分:5)

您必须解码数据。由于有问题的网站说

charset=iso-8859-1

使用它。 utf-8在这种情况下不会工作。

htmltext = htmlfile.read().decode('iso-8859-1')

答案 1 :(得分:3)

使用bytes literal作为模式:

title = re.findall(b'<title>(.*)</title>', htmltext)

或将检索到的数据解码为字符串:

title = re.findall('<title>(.*)</title>', htmltext.decode('utf-8'))

(使用适当的文档编码更改utf-8