scrapy版本爬取某网站,加入了ua池,ip池,不限速不封号,100个线程爬崩网站
scrapy版本爬取妹子图
不封号,不限速,无限爬取
关键所在下载图片
from scrapy.pipelines.images import ImagesPipeline
原来的类继承object,改为继承ImagesPipeline
其中 函数名固定
def get_media_requests # 下载图片
def item_completed # 是否下载成功
def file_path # 图片存放
前期准备
代理ip池
import pymysql
import random
def get_ip():
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='pachong',
charset='utf8',
autocommit=True
)
cursor = conn.cursor(pymysql.cursors.DictCursor)
sql = 'select ip from ip_list'
cursor.execute(sql)
ip_list = cursor.fetchall()
ip = random.choice(ip_list)['ip']
conn.close()
return ip
UserAgent池
def get_UserAgent():
from fake_useragent import UserAgent
ua = UserAgent(verify_ssl=False)
UserAgent = ua.random # 随机获取一个UserAgent
return UserAgent
middlewares中间件(破解反爬)
from mzitu.pool.ip import get_ip
from mzitu.pool.useragent import get_UserAgent
def process_request(self, request, spider):
request.meta['proxies'] = get_ip()
request.headers['User-Agent'] = get_UserAgent()
request.headers['Referer'] = 'https://www.mzitu.com/'
return None
settings配置
LOG_LEVEL='ERROR'
IMAGES_STORE = 'E:\python13\pachong\images' # 下载目录配置,没有自动创建
RETRY_ENABLED = False # 禁止重试
DOWNLOAD_TIMEOUT = 10 # 超时时间放弃
# 打开下载
ITEM_PIPELINES = {
'mzitu.pipelines.MzituPipeline': 300,
}
# 打开中间件
DOWNLOADER_MIDDLEWARES = {
'mzitu.middlewares.MzituDownloaderMiddleware': 543,
}
正题
爬虫
# -*- coding: utf-8 -*-
import scrapy
from bs4 import BeautifulSoup
from scrapy.http import Request
from mzitu.items import MzituItem
class AmzituSpider(scrapy.Spider):
name = 'Amzitu'
start_urls = ['https://www.mzitu.com/197251']
def parse(self, response):
soup = BeautifulSoup(response.text, 'lxml')
img_url = soup.select('.main-image img')[0].attrs['src']
next = soup.select('.pagenavi a:nth-last-child(1)')[0].attrs['href']
img_name = img_url.rsplit('/',1)[-1]
item = MzituItem()
item['img_url'] = img_url
item['img_name'] = img_name
yield item
yield Request(next)
保存下载图片
from scrapy.exceptions import DropItem
from scrapy.pipelines.images import ImagesPipeline
from scrapy.http import Request
class MzituPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
print(item['img_url'])
# 下载图片,如果传过来的是集合需要循环下载
# meta里面的数据是从spider获取,然后通过meta传递给下面方法:file_path
yield Request(url=item['img_url'], meta={'name': item['img_name']})
def item_completed(self, results, item, info):
# 是一个元组,第一个元素是布尔值表示是否成功
if not results[0][0]:
raise DropItem('下载失败')
return item
# 重命名图片名,若不重写这函数,图片名为哈希,就是一串乱七八糟的名字
def file_path(self, request, response=None, info=None):
img_name = request.meta['name']
return img_name
scrapy版本爬取某网站,加入了ua池,ip池,不限速不封号,100个线程爬崩网站的更多相关文章
- Scrapy爬取美女图片第三集 代理ip(上) (原创)
首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...
- Scrapy爬取美女图片第三集 代理ip(下)
这是我的公众号获取原创保护的首篇文章,原创的肯定将支持我继续前行.现在写这篇文章的时间是晚上11:30,写完就回寝室休息了,希望更多的朋友与我一起同行(当然需要一个善良的妹子的救济).(我的新书< ...
- 采集15个代理IP网站,打造免费代理IP池
采集的站点: 免费代理IP http://ip.yqie.com/ipproxy.htm66免费代理网 http://www.66ip.cn/89免费代理 http://www.89ip.cn/无忧代 ...
- 教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http://www.xiaohuar.com/,让你体验爬取校花的成就感. Scr ...
- 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神
原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...
- Scrapy爬取女神照片
使用Scrapy趴一趴美女图 Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据.Scrapy用途广泛,可以用于数据挖掘.监测和自 ...
- 通过scrapy,从模拟登录开始爬取知乎的问答数据
这篇文章将讲解如何爬取知乎上面的问答数据. 首先,我们需要知道,想要爬取知乎上面的数据,第一步肯定是登录,所以我们先介绍一下模拟登录: 先说一下我的思路: 1.首先我们需要控制登录的入口,重写star ...
- 使用scrapy爬取海外网学习频道
一:创建项目文件 1:首先在终端使用命令scrapy startproject huaerjieribao 创建项目 2:创建spider 首先cd进去刚刚创建的项目文件overseas 然后执行ge ...
- 爬虫入门之Scrapy框架基础框架结构及腾讯爬取(十)
Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方便我们爬取的网页中提取的数据. 如果安装了 IPyth ...
随机推荐
- 【opencv系列01】OpenCV4.X介绍与安装
一.介绍 OpenCV(开源计算机视觉库:http://opencv.org)是英特尔开源的一个跨平台计算机视觉的BSD许可库,包含数百种计算机视觉算法.OpenCV由Gary Bradsky于199 ...
- Python - 面向对象(一)入门篇
Python里面有一句话:万物皆是对象 如何面向对象编程 设计类 创建类实例对象 实例对象调用方法 创建对象 在内存中为对象分配空间 调用初始化方法 __init__ 为对象初始化 对象创建后,内 ...
- 面试官:说说你对css效率的理解
大家好,我是小雨小雨,致力于分享有趣的.实用的技术文章. 内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步. 大家的支持是我创作的动力. 选择器的优先级 众所周知,选择器是有权重 ...
- Block详解二(底层分析)
Block专辑: Block讲解一 MRC-block与ARC-block Block详解一(底层分析) 今天讲述Block的最后一篇,后两篇仅仅是加深1,2篇的理解,废话少说,开始讲解! __blo ...
- Centos单机部署Elasticsearch7.2集群
配置node0 # ======================== Elasticsearch Configuration ========================= # # NOTE: E ...
- 深入浅出C#结构体
目录 1.应用背景 2.结构体解析 2.1.结构体存在栈中 2.2.结构体不需要手动释放 3.封装心跳包结构体 4.结构体静态帮助类 5.New出来的结构体是存在堆中还是栈中? 5.1.不带形参的结构 ...
- SQL server 2012安装教程
转自:https://blog.csdn.net/u013162035/article/details/78567389 注]博主使用的是SQL Server2012 其他版本的安装类似.[第一步]下 ...
- Mock测试,结合Fiddler轻松搞定不同场景
在平时测试过程中,总会遇到一些比较难构造的场景.比如不同平台间的同步,异常场景的构造.遇到难构造的场景时,就可以引用Mock来进行单元测试.简言之:mock测试就是在测试过程中,对于某些不容易构造或者 ...
- pyplot 作图总结
折线图 下面是绘制折线图,设置图片的横轴纵轴标签,图片标题的API的用法. import matplotlib.pyplot as pyplot # init pyplot.figure() # ar ...
- 倒计时器CountDownLatch
1.背景: countDownLatch是在java1.5被引入,跟它一起被引入的工具类还有CyclicBarrier.Semaphore.concurrentHashMap和BlockingQueu ...