根据你提供的代码,有几个问题可能会导致下载图片出错:
1. find_imgs() 函数中的字符串查找逻辑有错误。你使用了 'img src=' 作为查找条件,但实际上在 HTML 中图片的地址可能会有其他形式,例如 'img data-src='。你需要修改字符串查找的条件来适应不同的图片地址格式。
2. 在 save_imgs() 函数中,将图片写入文件时使用了错误的打开模式。应该使用二进制写入模式('wb')而不是默认的文本写入模式。
3. 在主函数 download_mm() 中,你使用了未定义的变量 page_num。这会导致下载的图片地址不正确。你可以将 page_num 初始化为 page_num = int(get_page(url)) 以获得正确的页码。
综上所述,以下是修改后的代码,请尝试运行:
import urllib.request
import os
def url_open(url):
req = urllib.request.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36')
response = urllib.request.urlopen(url)
html = response.read()
return html
def get_page(url):
html = url_open(url).decode('gb2312', 'ignore')
a = html.find('<a class="current" href="javascript:void(0)">') + 45
b = html.find('<', a)
print(html[a:b])
return html[a:b]
def find_imgs(url):
html = url_open(url).decode('gb2312', 'ignore')
img_addrs = []
a = html.find('img src=')
while a != -1:
b = html.find('.jpg', a, a + 255)
if b != -1:
img_addrs.append(html[a + 9:b + 4])
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=20):
os.mkdir(folder)
os.chdir(folder)
url = 'https://car.autohome.com.cn/pic/series/6388-10.html'
page_num = int(get_page(url))
print(page_num)
for i in range(pages):
page_num -= i
page_url = 'https://car.autohome.com.cn/pic/series/6388-10-p' + str(page_num) + '.html'
print(i)
img_addrs = find_imgs(page_url)
save_imgs(folder, img_addrs)
if __name__ == '__main__':
download_mm()
请注意,由于网络环境和目标网站的可能变化,代码仍然存在其他潜在问题。如果问题仍然存在,请提供详细的错误信息以便更好地帮助你。
如果问题已经解决,请设置最佳答案 |