看了崔大佬的文章,写了这个爬虫,学习了!原文地址

现在该网站加了反爬机制,不过在headers里加上refere参数就行了。

以下代码仅做学习记录之用:

from bs4 import BeautifulSoup
import requests
import os
import time
# 构造带页码的页面链接
def get_mzi_page():
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1"
" (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
res = requests.get('http://www.mzitu.com', headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
page = soup.select('.nav-links a') # 返回一个列表
page_count = page[-2].get_text()
for i in range(1, int(page_count) + 1):
# 构造每个页面链接
page_url = "http://www.mzitu.com/page/" + f"{i}/"
# 获取当前页面的所有专题,并输出提示
print(f"总计{page_count}页,当前第{i}页:")
get_mzi_channel(page_url) def get_mzi_channel(url):
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1"
" (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
# 抓取每个妹子的专题页面
channel = soup.select('#pins li span a')
channel_count_onepage = len(channel)
print(channel)
count = 0
# 遍历所有专题url,逐个访问下载图片
for c in channel:
count += 1
channel_name = c.get_text()
os.mkdir('D;\mziPic')
filepath = f'D:\mziPic\{channel_name}'
if os.path.exists(filepath):
pass
else:
os.mkdir(filepath)
channel_url = c.get('href')
print(f"本页总计{len(channel)}个妹子,当前第{count}个妹子")# 提示信息
get_mzi_img(filepath, channel_url) def get_mzi_img(filepath ,url):
# 下载一个妹子的所有图片
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1"
" (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}
res = requests.get(url, headers=headers)
soup = BeautifulSoup(res.text, 'lxml')
#每个妹子的all图片是分多个页面展示的,所以还要再访问多个页面,逐图片下载
img_page = soup.select('.pagenavi a')
img_page_count = img_page[-2].get_text()
# 构造逐图片下载的url
count2 = 0
for i in range(1, int(img_page_count) + 1):
count2 += 1
img_page_url = url + f'/{i}'
print(f"本妹子共{img_page_count}图片,现第{count2}张")
print("img_page_url(refere):", img_page_url)
download(filepath, img_page_url, count2) def download(filepath, img_page_url, count2):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
headers2 = {'Accept': 'image/webp,image/apng,image/*,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
'Connection': 'keep-alive',
'DNT': '',
'Host': 'i.meizitu.net',
'Referer': img_page_url,
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
res = requests.get(img_page_url, headers=headers)
print("res.status_code", res.status_code)
if res.status_code == 200:
soup = BeautifulSoup(res.text, 'lxml')
img_url = soup.find('div', class_='main-image').find('img').get('src')
print("图片地址", img_url)
# 这个网站访问图片必须要带refere参数,不然返回403,(折腾好久才发现问题
res2 = requests.get(img_url, headers=headers2)
print("res2.status_code:", res2.status_code)
with open(filepath + f'/{count2}.jpg', 'ab') as f:
f.write(res2.content)
f.close()
# time.sleep(1) # 注释后运行下好像不封ip。。。
else:
pass if __name__ == '__main__':
get_mzi_page()

爬取mzi.com妹子图片网站(requests库)的更多相关文章

  1. python网络爬虫之解析网页的正则表达式(爬取4k动漫图片)[三]

    前言 hello,大家好 本章可是一个重中之重,因为我们今天是要爬取一个图片而不是一个网页或是一个json 所以我们也就不用用到selenium模块了,当然有兴趣的同学也一样可以使用selenium去 ...

  2. Python 爬取陈都灵百度图片

    Python 爬取陈都灵百度图片 标签(空格分隔): 随笔 今天意外发现了自己以前写的一篇爬虫脚本,爬取的是我的女神陈都灵,尝试运行了一下发现居然还能用.故把脚本贴出来分享一下. import req ...

  3. 使用BeautifulSoup自动爬取微信公众号图片

    爬取微信分享的图片,根据不同的页面自行修改,使用BeautifulSoup爬取,自行格局HTML修改要爬取图片的位置 import re import time import requests imp ...

  4. Python爬取 | 唯美女生图片

    这里只是代码展示,且复制后不能直接运行,需要配置一些设置才行,具体请查看下方链接介绍: Python爬取 | 唯美女生图片 from selenium import webdriver from fa ...

  5. python爬取某个网页的图片-如百度贴吧

    python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...

  6. from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)

    使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...

  7. C#爬取微博文字、图片、视频(不使用Cookie)

    前两天在网上偶然看到一个大佬OmegaXYZ写的文章,Python爬取微博文字与图片(不使用Cookie) 于是就心血来潮,顺手撸一个C#版本的. 其实原理也很简单,现在网上大多数版本都需要Cooki ...

  8. Python+Requests+Xpath(解析)爬取某站点简历图片(数据分析三)

    1.环境安装 pip install lxml 2.解析原理 使用通用爬虫爬取网页数据 实例化etree对象,且将页面数据加载到该对象中 使用xpath函数结合xpath表达式进行标签定位和指定数据提 ...

  9. 爬虫入门(三)——动态网页爬取:爬取pexel上的图片

    Pexel上有大量精美的图片,没事总想看看有什么好看的自己保存到电脑里可能会很有用 但是一个一个保存当然太麻烦了 所以不如我们写个爬虫吧(๑•̀ㅂ•́)و✧ 一开始学习爬虫的时候希望爬取pexel上的 ...

随机推荐

  1. 【干货】利用MVC5+EF6搭建博客系统(四)(下)前后台布局实现、发布博客以及展示

    二.博客系统后台布局实现 2.1.这里所用的是MVC的布局页来实现的,后台主要分为三部分:导航.菜单.主要内容 代码实现: 这里把后台单独放在一个区域里面,所以我这里建立一个admin的区域 在布局页 ...

  2. Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  3. Nacos系列:Nacos的Java SDK使用

    Maven依赖 Nacos提供完整的Java SDK,便于配置管理和服务发现及管理,以 Nacos-0.8.0 版本为例 添加Maven依赖: <dependency> <group ...

  4. websocket 初识

    websocket 初识 前言 其实很早就知道了 websocket 这个概念了,像现在大火的直播等使用的就是 websocket.之前找爬虫工作,对面问我爬过 websocket 网站没,很汗颜,那 ...

  5. [转]MySQL-死锁查询

    本文转自:https://blog.csdn.net/qq105319914/article/details/50562783 1.查询是否锁表 show OPEN TABLES where In_u ...

  6. 对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过文氏图 Venn diagrams 解释了SQL的Join。我觉得清楚易懂,转过来。

     对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Codi ...

  7. sql查询语句时怎么把几个字段拼接成一个字段

    sql查询语句时怎么把几个字段拼接成一个字段SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10) ...) a ...

  8. MySql常用 join 详解

    虽然这类资料比较多....我觉得还是有必要记下来,新手可以看看吧...老司机可以一眼飘过那... 常用SQL JOINS方式 1.SELECT select_list FROM TABLEA A LE ...

  9. 谈下mysql预处理基础

    传统的操作数据库方法有两种: 先写一条sql语句,然后通过mysqli->query($sql)去操作数据库(此处使用的是mysqli扩展库).这样操作并不会有什么大的错误,但是当要插入上千条上 ...

  10. C++中的queue类、QT中的QQueue类

    C++中的queue 实现一种先进先出的数据结构,是一个模板类 头文件 #include<queue> 用法(以int型为例): queue<int> Q; //定义一个int ...