文章目录

  • 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详解及主要应用场景相关推荐

  1. redis 数据类型详解 以及 redis适用场景场合

    redis 数据类型详解 以及 redis适用场景场合 1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访 ...

  2. 二分类最优阈值确定_机器学习 | 详解GBDT在分类场景中的应用原理与公式推导...

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...

  3. Java多线程系列(七):并发容器的原理,7大并发容器详解、及使用场景

    之前谈过高并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 高并发编程系列:CountDownLatch.Semaphore等4大并发工具类详解 高并发编程系列:4大J ...

  4. 一文详解面向多级多模态场景的召回引擎

    作者| 阿里文娱开发专家 崇懿. 阿里文娱开发专家慧善 责编 | 屠敏 头图 | CSDN 下载自视觉中国 出品 | CSDN(ID:CSDNnews) 优酷视频搜索在文本搜索系统的基础上,不断探索视 ...

  5. 一文详解如何在真实场景的双目立体匹配(Stereo Matching)获取深度图

    来源:博客园 作者:一度逍遥 双目立体匹配一直是双目视觉的研究热点,双目相机拍摄同一场景的左.右两幅视点图像,运用立体匹配匹配算法获取视差图,进而获取深度图.而深度图的应用范围非常广泛,由于其能够记录 ...

  6. edis 数据类型详解 以及 redis适用场景场合

    https://blog.csdn.net/wulantian/article/details/46724611 https://blog.csdn.net/hguisu/article/detail ...

  7. MongoDB详解--MongoDB的应用场景及特性介绍

    由于MongoDB面对文档的存储方式能够拓展传统意义上面向行存储的不足之处.在同一行可以存储更多信息,相当于每一行都是一个对象.这对于某些特定场景下只使用行来存储更加的方便和节约空间.下面我们就来说说 ...

  8. Java多线程系列(六):深入详解Synchronized同步锁的底层实现

    谈到多线程就不得不谈到Synchronized,很多同学只会使用,缺不是很明白整个Synchronized的底层实现原理,这也是面试经常被问到的环节,比如: synchronized的底层实现原理 s ...

  9. Java多线程系列(九):CountDownLatch、Semaphore等4大并发工具类详解

    之前谈过高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 ,以及高并发编程系列:ConcurrentHashMap的实现原理(JDK1.7和JDK1.8) 今天主要介绍concurre ...

最新文章

  1. Timus 1837. Isenbaev's Number
  2. WEB初学者简介,web入门
  3. 内存问题提醒!结构体+protobuf做协议体发送!序列化
  4. 云原生五大趋势预测,K8s安卓化位列其一
  5. RHEL 6安装中的问题
  6. html有几个文件夹,关于webpack打包问题,怎么打包成多个文件夹,每个文件夹下有相应的html,js和css?...
  7. 中国wms仓储管理系统行业发展状况分析?
  8. python进阶09并发之五生产者消费者
  9. docker搭建sonar服务
  10. SpringMVC测试框架(转载)
  11. Linux字符模式下如何设置/删除环境变量
  12. 安全防护之加盐慢哈希加密
  13. fastDFS安装用到命令
  14. 【计算机毕业设计】疫情社区管理系统的设计与实现
  15. VS2013下载及安装
  16. 十一届恩智浦智能车竞赛 信标 --- 首安666队
  17. python修改桌面壁纸_轻松有趣的Python小案例,让电脑自动更换壁纸
  18. 使用regedit导入导出环境变量
  19. Excel创建指定名称的单个工作表的3种操作
  20. 史上最强:NumPy 实现全部机器学习算法,代码超3万行!

热门文章

  1. 压缩机电流保护原因是什么?压缩机烧毁常见原因有哪些?
  2. 14种冷热源及空调系统特点介绍
  3. python文本编辑pycharm_PyCharm的基本使用
  4. ML之相似度计算:图像数据、字符串数据等计算相似度常用的十种方法简介、代码实现
  5. NLP之词向量:利用word2vec对20类新闻文本数据集进行词向量训练、测试(某个单词的相关词汇)
  6. ML之LiR2PolyR4PolyR:使用线性回归LiR、二次多项式回归2PolyR、四次多项式回归4PolyR模型在披萨数据集上拟合(train)、价格回归预测(test)
  7. CV之FRec之ME/LF:人脸识别中常用的模型评估指标/损失函数(Triplet Loss、Center Loss)简介、使用方法之详细攻略
  8. Crawler:基于BeautifulSoup库+requests库+伪装浏览器的方式实现爬取14年所有的福彩网页的福彩3D相关信息,并将其保存到Excel表格中
  9. 成功解决h5py\_init_.py:26:FutureWarning: Conversion of the second argument of issubdtype from `float` to
  10. Ubuntu18.04 CUDA与cudnn安装