关于无法将'bytes'对象转换为str的问题
模仿的是小甲鱼第57讲ooxx,但是出现了这个问题,一直不知道错在哪里,希望有大神帮我看看import urllib.request
import os
def url_open(url):
req=urllib.request.Request(url)
headers={'User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}
response=urllib.request.urlopen(url,headers)
html=response.read()
return html
def get_page(url):
html=url_open(url).decode('utf-8')
a=html.find('href="https://www.mzitu.com/210282/')+36
b=html.find('"',a)
return html
def finf_imgs(url):
html=url_open(url).decode('utf-8')
img_addrs=[]
a=html.find('img src=')
while a!=-1:
b=html.find('.jpg',a,a+255)
if b!=-1:
img_addrs.append(html)
else:
b=a+9
a=html.find('img src=',b)
return img_addrs
def save_imgs(folder,ig_addrs):
for each in img_addrs:
filename=each.split('/')[-1]
with open(filename,'wb') as f:
img=open_url(each)
f.write(img)
def download_mm(folder='ooxx',pages=10):
os.mkdir(folder)
os.chdir(folder)
url='https://www.mzitu.com/210282'
page_num=int(get_page(url))
for i in range(pages):
page_num += i
page_url=url+'/'+str(page_num)
img_addrs=find_imgs(page_url)
save_imgs(folder,img_addrs)
if __name__=='__main__':
download_mm()
with open(filename,'wb') as f:
img=open_url(each)
f.write(img)
这段代码错了!!!
哈哈哈 说出来你可能不相信, 我刚刚才做到33课时课后作业 ,
不过我刚刚尝试时候 误打误撞有碰到你标题这种情况,就是提示你标题的那种错误
这种原因是因为wb 是二进制写入 你要import pickle 然后把 f.write 改成用pickle.dump()就OK了 Twilight6 发表于 2020-4-2 16:58
这段代码错了!!!
刚刚试了一下,发现还是出同样的问题,呜呜呜{:10_266:} 流浪者阿薇 发表于 2020-4-2 17:02
刚刚试了一下,发现还是出同样的问题,呜呜呜
不会吧 本帖最后由 Twilight6 于 2020-4-2 17:15 编辑
流浪者阿薇 发表于 2020-4-2 17:02
刚刚试了一下,发现还是出同样的问题,呜呜呜
对不起大佬!打扰了!小的马上撤离战场哈哈哈因为刚刚看见你的错误一激动就啾进来了哈哈哈
那就超出我的知识范围了哈哈哈哈 不过我总感觉你那个地方应该是错的吧
{:9_240:} {:9_240:} {:9_240:} {:9_240:} {:9_240:} {:9_240:} {:9_240:} 本帖最后由 Twilight6 于 2020-4-2 17:23 编辑
流浪者阿薇 发表于 2020-4-2 17:02
刚刚试了一下,发现还是出同样的问题,呜呜呜
我是什么都看不懂。。。嘿嘿 Twilight6 发表于 2020-4-2 17:21
我是什么都看不懂。。。嘿嘿
哈哈哈哈没事我自己也看不懂 流浪者阿薇 发表于 2020-4-2 17:22
哈哈哈哈没事我自己也看不懂
错误信息呢 wp231957 发表于 2020-4-2 17:32
错误信息呢
Traceback (most recent call last):
File "C:\Users\ASUS\Desktop\爬虫\不同页面不同图片 - 副本.py", line 62, in <module>
download_mm()
File "C:\Users\ASUS\Desktop\爬虫\不同页面不同图片 - 副本.py", line 53, in download_mm
page_num=int(get_page(url))
File "C:\Users\ASUS\Desktop\爬虫\不同页面不同图片 - 副本.py", line 16, in get_page
req=urllib.request.urlopen(url,headers)
File "D:\Program Files\Python38\lib\urllib\request.py", line 222, in urlopen
return opener.open(url, data, timeout)
File "D:\Program Files\Python38\lib\urllib\request.py", line 525, in open
response = self._open(req, data)
File "D:\Program Files\Python38\lib\urllib\request.py", line 542, in _open
result = self._call_chain(self.handle_open, protocol, protocol +
File "D:\Program Files\Python38\lib\urllib\request.py", line 502, in _call_chain
result = func(*args)
File "D:\Program Files\Python38\lib\urllib\request.py", line 1362, in https_open
return self.do_open(http.client.HTTPSConnection, req,
File "D:\Program Files\Python38\lib\urllib\request.py", line 1319, in do_open
h.request(req.get_method(), req.selector, req.data, headers,
File "D:\Program Files\Python38\lib\http\client.py", line 1230, in request
self._send_request(method, url, body, headers, encode_chunked)
File "D:\Program Files\Python38\lib\http\client.py", line 1276, in _send_request
self.endheaders(body, encode_chunked=encode_chunked)
File "D:\Program Files\Python38\lib\http\client.py", line 1225, in endheaders
self._send_output(message_body, encode_chunked=encode_chunked)
File "D:\Program Files\Python38\lib\http\client.py", line 1041, in _send_output
chunk = f'{len(chunk):X}\r\n'.encode('ascii') + chunk \
TypeError: can't concat str to bytes 流浪者阿薇 发表于 2020-4-2 17:54
headers格式不对
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'}
改完还有创建目录错误 请自行修改 流浪者阿薇 发表于 2020-4-2 17:22
哈哈哈哈没事我自己也看不懂
headers 应该是一个字典 本帖最后由 shatanzongcai 于 2020-4-2 22:46 编辑
兄弟,你这个错误的地方有一点多诶,headers这个东西是放在urllib.request.Request()里面而不是urlopen()里面,然后你的字典格式也是错的,headers={'User-Agent','Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'} ,这里连接的应该是冒号而不是逗号啊兄弟!!!!之后还有url_open 打成open_url,还有其他的变量名字打错。 兄弟错的地方有点多,我帮你改了好久,一会儿你对比看下哪里要改。妹子图没办法爬,你跑完代码就知道了。只能请其他朋友帮忙看下。
import urllib.request
import os
def url_open(url):
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'}
req=urllib.request.Request(url,headers = headers)
response=urllib.request.urlopen(req)
html=response.read()
return html
def get_page(url):
html=url_open(url).decode('utf-8')
a=html.find("https://www.mzitu.com/210282/")
print(html)
return html
def find_imgs(url):
html=url_open(url).decode('utf-8')
img_addrs=[]
a=html.find('img src=')
while a!=-1:
b=html.find('.jpg',a,a+255)
if b!=-1:
img_addrs.append(html)
else:
b=a+9
a=html.find('img src=',b)
return img_addrs
def save_imgs(folder,img_addrs):
for each in img_addrs:
filename=each.split('/')[-1]
with open(filename,'wb') as f:
img=url_open(each)
f.write(img)
def download_mm(folder='ooxx',pages=10):
os.mkdir(folder)
os.chdir(folder)
url='https://www.mzitu.com/210282'
page_num=int(get_page(url))
for i in range(pages):
page_num += i
page_url=url+'/'+str(page_num)
img_addrs=find_imgs(page_url)
save_imgs(folder,img_addrs)
if __name__=='__main__':
download_mm()
shatanzongcai 发表于 2020-4-2 22:45
兄弟错的地方有点多,我帮你改了好久,一会儿你对比看下哪里要改。妹子图没办法爬,你跑完代码就知道了。只 ...
with open(filename,'wb') as f:# 代码45行
img=url_open(each) # 代码46行
f.write(img)
请教下二进制不是只能用pickle.dump()来写入嘛?这边用了write 应该算错了吧?
我今天刚刚学pickle模块真心请教 shatanzongcai 发表于 2020-4-2 22:45
兄弟错的地方有点多,我帮你改了好久,一会儿你对比看下哪里要改。妹子图没办法爬,你跑完代码就知道了。只 ...
哇谢谢大佬,我刚刚看到这里,还是新手 Twilight6 发表于 2020-4-2 23:05
请教下二进制不是只能用pickle.dump()来写入嘛?这边用了write 应该算错了吧?
我今天刚刚学pic ...
其实不是的,文件写入是可以使用二进制写入的,比方说你想要下载一首音乐,音乐文件不是字符串,你可以用二进制下载,这个时候你的文件写入应该是 F = open('某某音乐.mp3','wb'),不需要使用pickle。一般来说如果你的数据有很多不同的类型用pickle比较好一点,但是如果全都是二进制就可以直接使用wb。具体你可以返回去看看小甲鱼关于文件打开的视频和扩展阅读 流浪者阿薇 发表于 2020-4-3 10:50
哇谢谢大佬,我刚刚看到这里,还是新手
朋友你要是不知道类啊,函数具体怎么用,除了上网找以外,你可以直接打开IDLE然后按F1搜索你要看的那个函数,你比方说不知道headers应该加在哪里,你就搜一下,他会有教程告诉你参数都填什么。看不了英文也可以去找一找网上有的中文版。还有我发现朋友你好像函数的参数那一块有一点搞不明白,你去网上找一找python必须参数,关键词参数就知道了 shatanzongcai 发表于 2020-4-3 12:50
其实不是的,文件写入是可以使用二进制写入的,比方说你想要下载一首音乐,音乐文件不是字符串,你可以用 ...
好,谢谢!
页:
[1]