导读:爬取反爬虫图片网站

预览效果

遇到的问题:

刚开始爬虫的时候,爬取到的所有图片都是一张重定向推广图片
解决办法:在requests请求头headers中配置Referer属性,指向爬取网站的顶级域名(根据情况而定)

爬虫代码

import os,re
import requests
from contextlib import closing
from bs4 import BeautifulSoup
import json
import random
import time# 下载路径
DOWNLOAD_PATH = 'C:\\pictures\\美女校花\\'# 最大页数
MAX_PAGES = 30# 基础网址
BASE_URL = 'http://www.xxx.com/' # 清纯美女网站
BEAUTY_BASE_URL = BASE_URL + 'xiaohua/'# 列表URL
LIST_URL_ITEM = 'list_1_1.html'# 图片地址
BASIC_IMG_URL = 'http://img1.xxx.me/pic/' #http://img1.xxx.me/pic/3683/1.jpg class mmPicture(object):""" 图片下载 """def __init__(self):super(mmPicture, self).__init__()self.offset = 1self.list_url = BEAUTY_BASE_URLself.all_group_links = []self.all_img_links = []#请求列表页def requestDataList(self):headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" }if(self.offset != 1):self.list_url = BEAUTY_BASE_URL + 'list_1_' + str(self.offset) + '.html'print(self.list_url)with closing(requests.get(self.list_url, headers=headers)) as response:response.encoding="GBK"soup = BeautifulSoup(response.text, "html.parser")for sou in soup.find_all("dd"):AHref = sou.find('a')['href']#print(sou.find('a').string)if(re.match('.*\/{2}www.mm131.com\/.*', AHref)):self.all_group_links.append(AHref)#print(self.all_group_links)    passself.offset += 1print(self.offset)if(self.offset < MAX_PAGES):self.requestDataList()time.sleep(1)else:with open('./group.json','w') as f:f.write(json.dumps(self.all_group_links))# 详情页self.requestDetail()#请求详情页def requestDetail(self):# 读取本地jsonwith open('./group.json','r') as f:self.all_group_links = json.load(f)# 遍历获取图片链接for list_item_url in self.all_group_links:headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" }with closing(requests.get(list_item_url, headers=headers)) as response:response.encoding="GBK"soup = BeautifulSoup(response.text, "html.parser")#获取图片详情页码 href="1264_2.html"page_links = soup.select('.page-en')for page in page_links:img_url = re.match('\d+_{1}\d+',page['href'])[0].split('_')[0] + '/' + re.match('\d+_{1}\d+',page['href'])[0].split('_')[1] + '.jpg'self.all_img_links.append({'name': soup.find('h5').string,'url': img_url})print(list_item_url)# 写入本地文件with open('./links.json','w') as f:f.write(json.dumps(self.all_img_links))# 下载所有图片self.donwloadALLImgs()# 下载所有图片def donwloadALLImgs(self):with open('./links.json','r') as f:self.all_img_links = json.load(f)for imgItem in self.all_img_links:print(BASIC_IMG_URL+imgItem['url'])#下载文件self.downloads(imgItem)pass# 创建目录def mkdir(self, path):# 去除首位空格path = path.strip()# 去除尾部 \ 符号path = path.rstrip("\\")isExists = os.path.exists(path)# 判断结果if not isExists:os.makedirs(path) # 如果不存在则创建目录 # 创建目录操作函数return Trueelse:# 如果目录存在则不创建,并提示目录已存在return False# 下载def downloads(self, item):headers = { "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36", "Referer": "http://www.xxx.com/xiaohua/"}with closing(requests.get(BASIC_IMG_URL+item['url'], headers=headers, stream=True)) as response:chunk_size = 1024  # 单次请求最大值content_size = (int(response.headers['content-length'])/chunk_size/chunk_size)  # 内容体总大小data_count = 0print('\n开始下载:\n')#创建目录self.mkdir(DOWNLOAD_PATH+item['name'])# 开始下载操作with open( DOWNLOAD_PATH + item['name'] + '\\' + item['name'] + str(random.randrange(0, 1000)) + '.jpg', 'wb') as file:for data in response.iter_content(chunk_size = chunk_size):file.write(data)data_count += (len(data)/chunk_size/chunk_size)now_progress = (data_count / content_size) * 100print("\r 文件下载进度:%d%%(%d M/%d M) - %s " % (now_progress, data_count, content_size, item['name']), end=" ")print('\n\n下载成功!\n')# 下载图片
mm = mmPicture()
mm.donwloadALLImgs()

requests+bs4批量爬取反爬虫图片网站相关推荐

  1. 超简单的图片爬取项目,复制粘贴就能用,批量爬取动漫图片。(保姆教程,可根据需要修改URL)

    各位未来国家栋梁们好啊~相信栋梁们经常需要在网络上寻找各种资源,作为二次元的必备精神食粮,图片资源那是必不可少!在这里用python写了一个超简单的图片爬取小项目~话不多说,附上源码!(有用的话点个赞 ...

  2. 批量爬取中国大学MOOC网站的媒体资源

    质量声明:原创文章,内容质量问题请评论吐槽.如对您产生干扰,可私信删除. 主要参考:https://github.com/Dayunxi/getMOOCmedia 三点说明: 感谢 中国大学MOOC ...

  3. 爬虫实战:批量爬取京东内衣图片(自动爬取多页,非一页)

    做下男生想做的事,爬取大量妹子内衣图. 作者: 电气-余登武 准备工作 假如我们想把京东内衣类商品的图片全部下载到本地,通过手工复制粘贴将是一项非常庞大的工程,此时,可以用python爬虫实现. 第一 ...

  4. requests+bs4+正则爬取前程无忧招聘信息进阶版

    整理思路 获取所有职位信息的url 通过正则去掉不符合要求的url 爬取详情页信息 解析详情页 写入txt文件 循环抓取 提高速度多线程爬取 先放上url:https://search.51job.c ...

  5. python selenium加bs4批量爬取斗鱼直播信息

    from selenium import webdriver from bs4 import BeautifulSoup import time # 返回Phantomjs对象 driver = we ...

  6. pyspider爬取免费正版图片网站Pixabay

    前言: 许多网友贡献了不少的爬取妹子图片,豆瓣电影的教程,开始学爬虫的时候也少不了参考各位大佬的代码和填坑的经验!这次打算原创出一个爬取国外比较大的图片网站Pixabay 之所以选择该网站 第一:Pi ...

  7. python爬取下载动态图片网站

    这次我们来爬取一个图片网站 unsplash.com,为什么要选择这个网站呢?因为这个网站的所有图片都是js动态请求生成的,所以说一般的爬取肯定是不行的啦 ~ 一.工具 这次爬取我们需要借助一款工具代 ...

  8. Python3用requests,multiprocessing多线程爬取今日头条图片

    仅供交流学习 #coding=utf-8import json import requests import re import os from multiprocessing import Pool ...

  9. 用爬虫爬取某妹子图片网站图片

    闲聊 这部分在这就省了吧 感兴趣去我自己搭的博客看 : www.jojo-m.cn 代码实现 import requests from lxml import etree import time im ...

最新文章

  1. 虽然这些代码很少,就几行,但却很牛逼!
  2. Integer to Roman 问题
  3. (转载)KVM is required to run this AVD /dev/kvm permission denied Ubuntu Android Studio
  4. 财付通接口(asp)
  5. docker --- 梳理 Dockerfile docker-compose.yml
  6. MFC_Combo_Box_用法(下拉框)
  7. 面经——操作系统(linux为例)
  8. 数据库系统概念中文版pdf
  9. winRar禁止弹窗广告方法
  10. 几种常见的归一化方法
  11. 哪款软件可以测试网速上行,怎么测试自己宽带的上行速度(查询上下行宽带方法)...
  12. linux 监听 ipv6,zabbix 监控 ipv6
  13. 扒一个超棒的stm32的开源usb-can项目,canable及PCAN固件
  14. 商务英语中最易犯的五个错误
  15. 【重识云原生】第六章容器基础6.4.10.3节——StatefulSet实操案例-部署WordPress 和 MySQL
  16. 高通msm8916 gpio笔记(基于设备树)
  17. 深圳软件测试几月份好找工作,上海与深圳的软件测试发展,未来哪个更有发展前景?...
  18. 盘丝洞服务器维护,梦幻西游:明日维护公告解读!盘丝法宝调整,新增人物志玩法!...
  19. 刀片服务器接显示器,《魔兽世界》国服 退役刀片服务器开售
  20. 智能驾驶走上时代风口,数据堂助力汽车更具“智慧”

热门文章

  1. Windows远程桌面(RDP)密码凭证获取 (゚益゚メ) 渗透测试
  2. 树莓派+motion实现局域网简单监控
  3. 计算机图形学 旋转平移原理,计算机图形旋转操作详细步骤
  4. MAT无法打开较大的hprof的解决办法
  5. DeepLabCut AI Residency
  6. Android开发艺术探索--第二章IPC机制(2)之Binder
  7. 十二届蓝桥杯第四期模拟比赛
  8. dll注册加载失败解决方法
  9. 立足中国、跻身全球头部代工厂行列,华虹加速蜕变升级
  10. uva 10118 Free Candies