scrapy详解及主要应用场景
文章目录
- 1、scrapy 多页爬取
- 2、scrapy爬取详情页
- 3、scrapy发送post请求
- 4、scrapy中间件
- 5、下载中间件实现UA池
1、scrapy 多页爬取
# spider编码在原基础之上, 构建其他页面的url地址, 并利用scrapy.Request发起新的请求, 请求的回调函数依然是parse:
page = 1
base_url = 'http://www.xiaohuar.com/list-1-%s.html'
if self.page < 4:page_url = base_url%self.pageself.page += 1yield scrapy.Request(url=page_url, callback=self.parse)
# (其他文件不用改动)
2、scrapy爬取详情页
需求: 爬取笑话的标题与详情页连接, 通过详情页链接, 爬取详情页笑话内容
# item编码: 定义数据持久化的字段信息
import scrapy
class JokeItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()title = scrapy.Field()content = scrapy.Field()
# spider的编码:
# -*- coding: utf-8 -*-
import scrapy
from ..items import JokeItemclass XhSpider(scrapy.Spider):name = 'xh'# allowed_domains = ['www.baidu.com']start_urls = ['http://www.jokeji.cn/list.htm']def parse(self, response):li_list = response.xpath('//div[@class="list_title"]/ul/li')for li in li_list:title = li.xpath('./b/a/text()').extract_first()link = 'http://www.jokeji.cn' + li.xpath('./b/a/@href').extract_first()yield scrapy.Request(url=link, callback=self.datail_parse, meta={"title":title})def datail_parse(self, response):joke_list = response.xpath('//span[@id="text110"]//text()').extract()title = response.meta["title"]content = ''for s in joke_list:content += sitem = JokeItem()item["title"] = titleitem["content"] = contentyield item
# Pipeline编码: 数据持久化具体操作
import pymongoclass JokePipeline(object):conn = pymongo.MongoClient('localhost', 27017)db = conn.hahatable = db.hahatabledef process_item(self, item, spider):self.table.insert(dict(item))return itemdef close_spider(self, spider):self.conn.close()
# settings配置编码:
UA伪装
Robots协议
Item_Pipeline
3、scrapy发送post请求
import scrapy
import jsonclass FySpider(scrapy.Spider):name = 'fy'# allowed_domains = ['www.baidu.com']start_urls = ['https://fanyi.baidu.com/sug']def start_requests(self):data = {'kw':'boy'}yield scrapy.FormRequest(url=self.start_urls[0], callback=self.parse, formdata=data)def parse(self, response):print(response.text)print(json.loads(response.text))
4、scrapy中间件
# 中间件分类:- 下载中间件: DownloadMiddleware- 爬虫中间件: SpiderMiddleware
# 中间件的作用:- 下载中间件: 拦截请求与响应, 篡改请求与响应- 爬虫中间件: 拦截请求与响应, 拦截管道item, 篡改请求与响应, 处理item
# 下载中间件的主要方法:
process_request
process_response
process_exception
下载中间件拦截请求, 使用代理ip案例
# spider编码:
import scrapy
class DlproxySpider(scrapy.Spider):name = 'dlproxy'# allowed_domains = ['www.baidu.com']start_urls = ['https://www.baidu.com/s?wd=ip']def parse(self, response):with open('baiduproxy.html', 'w', encoding='utf-8') as f:f.write(response.text)
# Downloadermiddleware编码:
def process_request(self, request, spider):request.meta['proxy'] = 'http://111.231.90.122:8888'return None
5、下载中间件实现UA池
# spider编码:
class DlproxySpider(scrapy.Spider):name = 'dlproxy'# allowed_domains = ['www.baidu.com']start_urls = ['https://www.baidu.com/','https://www.baidu.com/','https://www.baidu.com/','https://www.baidu.com/','https://www.baidu.com/']def parse(self, response):pass
# 中间件的编码:
from scrapy import signals
from fake_useragent import UserAgent
import random
ua = UserAgent()
ua_list = []
for i in range(100):ua_chrome = ua.Chromeua_list.append(ua_chrome)class ...():def process_request(self, request, spider):# request.meta['proxy'] = 'http://111.231.90.122:8888'print(55555555555555555555555555555)print(self.ua_pool)print(55555555555555555555555555555)request.headers['User-Agent'] = random.choice(self.ua_pool)return Nonedef process_response(self, request, response, spider):print(1111111111111111111111111111111)print(request.headers["User-Agent"])print(2222222222222222222222222222222)return response
scrapy详解及主要应用场景相关推荐
- redis 数据类型详解 以及 redis适用场景场合
redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...
- 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
- Java多线程系列(七):并发容器的原理,7大并发容器详解、及使用场景
之前谈过高并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 高并发编程系列:CountDownLatch.Semaphore等4大并发工具类详解 高并发编程系列:4大J ...
- 一文详解面向多级多模态场景的召回引擎
作者| 阿里文娱开发专家 崇懿. 阿里文娱开发专家慧善 责编 | 屠敏 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 优酷视频搜索在文本搜索系统的基础上,不断探索视 ...
- 一文详解如何在真实场景的双目立体匹配(Stereo Matching)获取深度图
来源:博客园 作者:一度逍遥 双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左.右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图.而深度图的应用范围非常广泛,由于其能够记录 ...
- edis 数据类型详解 以及 redis适用场景场合
https://blog.csdn.net/wulantian/article/details/46724611 https://blog.csdn.net/hguisu/article/detail ...
- MongoDB详解--MongoDB的应用场景及特性介绍
由于MongoDB面对文档的存储方式能够拓展传统意义上面向行存储的不足之处.在同一行可以存储更多信息,相当于每一行都是一个对象.这对于某些特定场景下只使用行来存储更加的方便和节约空间.下面我们就来说说 ...
- Java多线程系列(六):深入详解Synchronized同步锁的底层实现
谈到多线程就不得不谈到Synchronized,很多同学只会使用,缺不是很明白整个Synchronized的底层实现原理,这也是面试经常被问到的环节,比如: synchronized的底层实现原理 s ...
- Java多线程系列(九):CountDownLatch、Semaphore等4大并发工具类详解
之前谈过高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 ,以及高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) 今天主要介绍concurre ...
最新文章
- Timus 1837. Isenbaev's Number
- WEB初学者简介,web入门
- 内存问题提醒!结构体+protobuf做协议体发送!序列化
- 云原生五大趋势预测,K8s安卓化位列其一
- RHEL 6安装中的问题
- html有几个文件夹,关于webpack打包问题,怎么打包成多个文件夹,每个文件夹下有相应的html,js和css?...
- 中国wms仓储管理系统行业发展状况分析?
- python进阶09并发之五生产者消费者
- docker搭建sonar服务
- SpringMVC测试框架(转载)
- Linux字符模式下如何设置/删除环境变量
- 安全防护之加盐慢哈希加密
- fastDFS安装用到命令
- 【计算机毕业设计】疫情社区管理系统的设计与实现
- VS2013下载及安装
- 十一届恩智浦智能车竞赛 信标 --- 首安666队
- python修改桌面壁纸_轻松有趣的Python小案例,让电脑自动更换壁纸
- 使用regedit导入导出环境变量
- Excel创建指定名称的单个工作表的3种操作
- 史上最强:NumPy 实现全部机器学习算法,代码超3万行!
热门文章
- 压缩机电流保护原因是什么?压缩机烧毁常见原因有哪些?
- 14种冷热源及空调系统特点介绍
- python文本编辑pycharm_PyCharm的基本使用
- ML之相似度计算:图像数据、字符串数据等计算相似度常用的十种方法简介、代码实现
- NLP之词向量:利用word2vec对20类新闻文本数据集进行词向量训练、测试(某个单词的相关词汇)
- ML之LiR2PolyR4PolyR:使用线性回归LiR、二次多项式回归2PolyR、四次多项式回归4PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)
- CV之FRec之ME/LF:人脸识别中常用的模型评估指标/损失函数(Triplet Loss、Center Loss)简介、使用方法之详细攻略
- Crawler:基于BeautifulSoup库+requests库+伪装浏览器的方式实现爬取14年所有的福彩网页的福彩3D相关信息,并将其保存到Excel表格中
- 成功解决h5py\_init_.py:26:FutureWarning: Conversion of the second argument of issubdtype from `float` to
- Ubuntu18.04 CUDA与cudnn安装