找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 6241|回复: 4

[求助] python3抓取http://www.mzitu.com/的图片无法显示怎么解决?

5

主题

11

帖子

11

积分

贫民

积分
11
xingyun1688 发表于 2017-12-5 17:44:35 | 显示全部楼层 |阅读模式
python3抓取http://www.mzitu.com/的图片无法显示怎么解决?
似乎是防盗链

  1. #!/usr/bin/env python3
  2. import requests
  3. from bs4 import BeautifulSoup
  4. import os

  5. # 爬取目标
  6. url = 'http://www.mzitu.com/page/'
  7. parser = 'html.parser'
  8. cur_path = 'D:/LXYWorking/PythonFiles/Datamining/'

  9. # 设置报头,Http协议
  10. header = {
  11.     'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.104 Safari/537.36'}
  12. # 爬取的预览页面数量
  13. preview_page_cnt = 2
  14. for cur_page in range(1, int(preview_page_cnt) + 1):
  15.     cur_url = url + str(cur_page)
  16.     cur_page = requests.get(cur_url, headers=header)
  17.     # 解析网页
  18.     soup = BeautifulSoup(cur_page.text, parser)
  19.     # 图片入口和文字入口取一个即可
  20.     preview_link_list = soup.find(id='pins').find_all('a', target='_blank')[1::2]
  21.     for link in preview_link_list:
  22.         dir_name = link.get_text().strip().replace('?', '')
  23.         link = link['href']
  24.         soup = BeautifulSoup(requests.get(link).text, parser)

  25.         # 获取图片数量
  26.         pic_cnt = soup.find('div', class_='pagenavi').find_all('a')[4].get_text()
  27.         # 创建目录
  28.         pic_path = cur_path
  29.         if os.path.exists(pic_path):
  30.             print('directory exist!')
  31.         else:
  32.             os.mkdir(pic_path)
  33.         os.chdir(pic_path)  # 进入目录,开始下载
  34.         print('下载' + dir_name + '...')
  35.         # 遍历获取每页图片的地址
  36.         for pic_index in range(1, int(pic_cnt) + 1):
  37.             pic_link = link + '/' + str(pic_index)
  38.             cur_page = requests.get(pic_link, headers=header)
  39.             soup = BeautifulSoup(cur_page.text, parser)
  40.             pic_src = soup.find('div', 'main-image').find('img')['src']
  41.             pic_name = pic_src.split('/')[-1]
  42.             f = open(pic_name, 'wb')
  43.             f.write(requests.get(pic_src, headers=header).content)
  44.             f.close()
  45.         os.chdir(cur_path)  # 完成下载,退出目录
  46. print('下载完成')
复制代码
请问有什么解决的方法?
回复

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2017-12-5 20:16:54 | 显示全部楼层
断点打印一下requests.get(pic_src, headers=header).content的返回值,看看返回什么?还有http请求的状态码
回复 支持 反对

使用道具 举报

5

主题

11

帖子

11

积分

贫民

积分
11
xingyun1688  楼主| 发表于 2017-12-5 21:54:29 | 显示全部楼层
回复 支持 反对

使用道具 举报

50

主题

1057

帖子

1108

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1108

活跃会员热心会员最佳导师默默耕耘突出贡献优秀版主荣誉管理论坛元老

blueelwang 发表于 2017-12-6 17:26:53 | 显示全部楼层
xingyun1688 发表于 2017-12-5 21:54
http://i.meizitu.net/2017/11/27c48.jpg
http://i.meizitu.net/2017/11/27c49.jpg
http://i.meizitu.net ...

这样肯定不对, 你把这些内容写入图片, 图片肯定无法打开, 应该下载上面的地址的图片数据再保存
回复 支持 反对

使用道具 举报

5

主题

11

帖子

11

积分

贫民

积分
11
xingyun1688  楼主| 发表于 2017-12-8 14:15:14 | 显示全部楼层
blueelwang 发表于 2017-12-6 17:26
这样肯定不对, 你把这些内容写入图片, 图片肯定无法打开, 应该下载上面的地址的图片数据再保存 ...

谢谢,本人新手,很感谢你的解答
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表