1. ホーム

Pythonラーニングノートです。TypeError: cannot use a string pattern on a bytes-like object とその解決法

2022-02-18 21:20:55
#! /usr/python3
インポートre
インポートUrllib .リクエスト
def gethtml(url):
    ページ=urllib .リクエスト .urlopen(url)
    html=page.read()
    htmlを返す
def getimg(html):
    reg = r'src="(.*??Ⅻ.jpg)"'
    img=re.compile(reg)です。
html=html.decode('utf-8')#python3
    imglist=re.findall(img,html)
    x = 0
    for imgurl in imglist:
        urllib.request.urlretrieve(imgurl,'%s.jpg'%x)
        x = x+1
html = gethtml("http://news.ifeng.com/a/20161115/50258273_0.shtml")

print(getimg(html))する。

赤い部分はPython3.0以上のコードで、クロールの学習時に注意が必要です(私は以前はPython2.7、現在はPython3.5.2を使っています)。赤いコードがないと、以下のようになることがあります。

1.TypeError: cannot use string pattern on a bytes-like object この場合の解決策としては、文字列のパターンとして html=html.decode('utf-8')#python3 このようなコードです。

2. AttributeError: module 'urllib' has no attribute 'urlopen' この場合の解決策は、urllibをurllib.requestに変更することです。