urllib.request.urlopen TypeError:需要一个类似字节的对象,而不是'str'

时间:2019-07-30 00:37:21

标签: python python-3.x urllib

我在做什么错?

//...
<html>
<head>
  <style>
    /*class to hide inputs, or insert it in a file css*/
    .inputHidden{display:none !important;}
  </style>
</head>
<body>
  
  <!--add class-->
  <input class='inputHidden' type='file' name='bla'>
  
</body>
</html>

错误是

from urllib import request

def get_page(page):
    page = request.urlopen(page).read()
    return page

def get_next_target(page):
    start_link = page.find("<a href=")
    if(start_link == -1):
        return None
    start_quote = page.find('"', start_link)
    end_quote = page.find('"', start_quote+1)
    url = page[start_quote+1:end_quote]
    print(url)
    return(url,end_quote)

def print_all_links(page):
    while True:
        url, endpos = get_next_target(page)
        if url:
            print(url)
            page = page[endpos:]
        else:
            break

page = get_page('https://xkcd.com/')
print(page)
get_next_target(page)
#print_all_links(page)

1 个答案:

答案 0 :(得分:0)

read的返回类型为bytes。在您的get_page函数中,调用decode将字节转换为字符串。

def get_page(page):
    page = request.urlopen(page).read()
    return page.decode('utf-8')

您可以阅读有关使用urllib来获取互联网资源here的更多信息。但是requests为此类任务提供了更简单的界面。

使用Beautiful Soup之类的库进行网络抓取也更简单。