网络爬虫的盛行,反扒机制主要有三类:

  1. 验证headers
  2. 验证用户行为
  3. 加载Ajax请求

本次爬取的对象使用了前两种反扒机制,后面我会讲如何绕开,并获取到数据。本次使用的requests库和lxml库需要手动安装一下:

pip install requests
pip install lxml

好了,废话不多说,我们开始吧,先上源码

import random
import re
import time
import requests
from lxml import etree
import osheaders = {'accept-encoding':'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','referer': 'https://www.mzitu.com/','cookie': 'Hm_lvt_dbc355aef238b6c32b43eacbbf161c3c=1586682048,1586697823,1586749867; Hm_lpvt_dbc355aef238b6c32b43eacbbf161c3c=1586749931','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'
}def fix_headers_page(number_page):'''修复referer,请求主页妹子时使用'''headers_01 = {'accept-encoding':'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','referer': 'https://www.mzitu.com/xinggan/page/'+ number_page,'cookie': 'Hm_lvt_dbc355aef238b6c32b43eacbbf161c3c=1586682048,1586697823,1586749867; Hm_lpvt_dbc355aef238b6c32b43eacbbf161c3c=1586749931','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}return headers_01def fix_headers_s(word):'''修复referer,请求一组妹子图时使用'''headers_01 = {'accept-encoding':'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','referer': 'https://www.mzitu.com/'+ word,'cookie': 'Hm_lvt_dbc355aef238b6c32b43eacbbf161c3c=1586682048,1586697823,1586749867; Hm_lpvt_dbc355aef238b6c32b43eacbbf161c3c=1586749931','user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}return headers_01def fix_headers(word):'''修复referer,请求每张照片使用'''headers_01 = {'accept-encoding':'gzip, deflate, br','accept-language': 'zh-CN,zh;q=0.9','referer': 'https://www.mzitu.com/'+ word,'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.92 Safari/537.36'}return headers_01url = 'https://www.mzitu.com/xinggan/'def create(addr):'''创建目录'''creat_dir = []page_link_s,count = get_main_link()page_link_s_two = get_page_link()for page in page_link_s:pattern = re.compile(r'\d{6,10}')number = re.findall(pattern, page)word = number[0]creat_dir.append(word)for page in page_link_s_two:pattern = re.compile(r'\d{6,10}')number = re.findall(pattern, page)word = number[0]creat_dir.append(word)for i in creat_dir: os.makedirs(addr+'/'+str(i)) def get_main_link():'''获取性感妹子主页图的链接'''r = requests.get(url,headers=headers)# time.sleep(random.randint(5,10))# print(r.status_code)html = etree.HTML(r.text)page_link = html.xpath('//*[@id="pins"]//span/a/@href')page_count_link = html.xpath('//*[@class="page-numbers"][4]/@href')pattern = re.compile(r'\d{1,4}')count = re.findall(pattern, page_count_link[0])[0]return page_link,countdef get_page_link():'''获取每一页的链接以便获取每页中妹子的组图的链接'''new_urls = []page_link, count = get_main_link()tag = 51if int(count) > int(tag):count = tagpage_count_link = []url = 'https://www.mzitu.com/xinggan/page/' for page in range(2,int(count)):temp = url + str(page)new_urls.append(temp)for new_url in new_urls:time.sleep(1)pattern = re.compile(r'\d{1,4}')number_page_temp = re.findall(pattern, new_url)number_page = number_page_temp[0]header = fix_headers_page(number_page)r = requests.get(new_url,headers=header)html = etree.HTML(r.text)page_link_count = html.xpath('//*[@id="pins"]//span/a/@href')if page_link_count:page_count_link.append(page_link_count[0])print(page_count_link)return page_count_linkdef get_photo_one_link(page_link):'''获取单个妹子内部连接及页码'''create(os.getcwd())new_urls = []page = []for i in page_link:# 重做headerspattern = re.compile(r'\d{6,10}')number_num = re.findall(pattern, i)words_words = number_num[0]r = requests.get(i,headers=fix_headers_s(words_words))time.sleep(random.randint(1,5))html = etree.HTML(r.text)# 获取页码get_zong_page = html.xpath('//*[@class="pagenavi"]//a/@href')numberss = get_zong_page[-2][-2:]int_num = int(numberss)for num in range(2,int_num):page.append(num)num_url = i+'/'+ str(num)new_urls.append(num_url)for new_url in new_urls:# 获取单张图片的链接# 重做headersindex_s = new_urls.index(new_url) + 2pattern = re.compile(r'\d{6,10}')number = re.findall(pattern, new_url)word = '/' +number[0]+ '/' + str(index_s)# 启用新的头部文件header = fix_headers(word)rr = requests.get(new_url,headers=header)# time.sleep(random.randint(1,5))html_01 = etree.HTML(rr.text)# 提取每页中的图片下载linklinks = html_01.xpath('//*[@class="main-image"]//img/@src')for link in links:filename = number[0]+ '/' +link[-9:]print(link[-9:])with open(filename,'wb') as f:# time.sleep(random.randint(1,2))time.sleep(1)ret = requests.get(link,headers=header)f.write(ret.content)new_urls = []if __name__ =='__main__':print('开始下载...')page_link, count = get_main_link()   get_photo_one_link(page_link) # 获取首页的妹子图page_link_ss = get_page_link()get_photo_one_link(page_link_ss) # 获取后续妹子的图print('下载结束!!!!')

看看结果

谢谢来看后续

该网站验证headers主要验证的是referer,每次加载时,主要变化是这里,在下载图片时,需要在请求中加headers,否则下载的图片无法打开。具体看代码部分。

with open(filename,'wb') as f:time.sleep(1)ret = requests.get(link,headers=header)f.write(ret.content)

关于第二个验证用户行为,加入延时即可。

注:在get_page_link函数中需要取消限制,可以爬取更多数据,只需要注释掉就可以了。否则只能爬取52页的妹子图(每页24组妹子图(每组好像也挺多额))!!!

代码很烂(好丢脸)大家看下就好

网络爬虫实战之从妹子图开始相关推荐

  1. python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...

    廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ...

  2. python爬虫文件代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)...

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  3. python代码大全p-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  4. python基础代码大全-Python网络爬虫实战项目代码大全(长期更新,欢迎补充)

    WechatSogou[1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典.[1]: https://github ...

  5. Python 网络爬虫实战:猫眼电影 38950 条评论数据告诉你《无名之辈》是否值得一看?

    11月16日,一部无流量明星.无大制作.无大IP的"三无"国产电影<无名之辈>上映后,竟然连续打败了超级英雄"毒液".会魔法的"神奇动物& ...

  6. [day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.Scrapy简介 4. ...

  7. [day1]python网络爬虫实战:爬取美女写真图片

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  8. [day2]python网络爬虫实战:爬取美女写真图片(增强版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  9. Python网络爬虫实战项目代码大全(长期更新,欢迎补充)

    Python网络爬虫实战项目代码大全(长期更新,欢迎补充) 阿橙 · 1 个月内 WechatSogou [1]- 微信公众号爬虫.基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫, ...

最新文章

  1. C#语言与面向对象技术(5)
  2. 对话腾讯AI Lab:即将开源自动化模型压缩框架PocketFlow,加速效果可达50%
  3. python使用imbalanced-learn的SMOTE方法进行上采样处理数据不平衡问题
  4. Keepalived实现LVS的高可用全解析
  5. MySQL 的 count(*) 的优化,获取千万级数据表的总行数
  6. c语言以顺序结构存储的二叉树的非递归遍历,C语言二叉树的非递归遍历实例分析...
  7. 数据结构之malloc()函数动态内存分配复习
  8. mysql 空字符串_NULL与MySQL空字符串的区别
  9. oracle 942错误(exp imp 出问题的解决方案)
  10. 关于Python常见功能使用的博客收藏
  11. matlab 发微信,微信红包算法MATLAB实现
  12. 计算机教师计算机网络面试题,初中信息技术教师资格面试真题及答案:IP地址...
  13. 神经网络算法详解 03:竞争神经网络(SONN、SOFM、LVQ、CPN、ART)
  14. 怎么在计算机里隐藏文件,怎么显示电脑隐藏文件?
  15. java控制小数位数_java中怎么控制double的小数位数?
  16. 微信公众平台生成二维码海报是如何做到的?
  17. python医院管理系统代码_php医院管理系统,源码免费分享
  18. Cuboid之key-value
  19. Automated_bounty_Hunter全自动漏*洞赏金猎人使用场景二
  20. 鸿蒙启智 博学多才是什么意思,博学多才是什么意思

热门文章

  1. 树莓派3B+采用花生棒进行内网穿透,从拆箱到实现SSH远程控制与sftp简单远程文件上传下载
  2. 一个谷粉和3年的Google Reader重度使用者的碎碎念
  3. ESP8266EX芯片文档
  4. JQuery ajax使用总结
  5. 全文检索服务器-Elasticsearch
  6. 一家之言:de_nuke全面分析
  7. 通过搭建MySQL掌握k8s(Kubernetes)重要概念(下):参数配置
  8. 【阅读】当我遇见一个人
  9. cordova App脚手架
  10. AI初探——百度、阿里、腾讯开放平台OCR功能解析