一 Post 请求

在爬虫文件中重写父类的start_requests(self)方法

  • 父类方法源码(Request):
  1. def start_requests(self):
  2.  
  3. for url in self.start_urls:
  4. yield scrapy.Request(url=url,callback=self.parse)
  • 重写该方法(FormRequests(url=url,callback=self.parse,formdata=data))
  1. def start_requests(self):
  2. data={
  3. 'kw': 'xml',
  4. }
  5. for url in self.start_urls:
  1. #post请求,并传递参数
  1. yield scrapy.FormRequest(url=url,callback=self.parse,formdata=data)

二 多页面手动爬去数据

  1. import scrapy
  2. from QiubaiPagePro.items import QiubaipageproItem
  3.  
  4. class QiubaiSpider(scrapy.Spider):
  5. name = 'qiubai'
  6. # allowed_domains = ['xxx.com']
  7. start_urls = ['https://www.qiushibaike.com/text/']
  8. '''
  9. https://www.qiushibaike.com/text/page/13/
  10. '''
  11. url='https://www.qiushibaike.com/text/page/%d/'
  12. #手动发起请求
  13. page=1
  14.  
  15. def parse(self, response):
  16. div_list = response.xpath('//div[@id="content-left"]/div')
  17. for div in div_list:
  18. author = div.xpath('./div[1]/a[2]/h2/text()').extract_first()
  19. content = div.xpath('./a[1]/div[@class="content"]/span//text()').extract()
  20. content = "".join(content)
  21.  
  22. #实例管道对象
  23. item=QiubaipageproItem()
  24. item['author']=author
  25. item['content']=content.strip()
  26. yield item
  • 1 构造请求url的格式
  1. url='https://www.qiushibaike.com/text/page/%d/'
  2. #手动发起请求
  3. page=1
  • 2 手动发送请求
  1. if self.page<=12:
  2. self.page += 1
  3. url=format(self.url%self.page)
  4. #手动发送请求
  5. yield scrapy.Request(url=url,callback=self.parse)

三 五大核心组件

  • 引擎(Scrapy)用来处理整个系统的数据流,触发事务(框架核心)
  • 调度器(Scheduler) 用来接收应勤发过来的请求,压入队列中,并在引擎再次发起请求的时候返回,可以想象成一个url的优先队列,他决定下一个要爬取的网址是什么,同时去重复的网址。
  • 下载器(Downloader)用于下载页面内容,并将页面内容返回给引擎。
  • 爬虫(Spider)爬虫主要是干活的,用于从特定的网页中提取自己需要的信息。用户可以在这里面编写程序,从网页中提取链接,让scrapy继续爬取下一个页面。
  • 项目管理(Pipeline)负责处理爬虫从网页中爬取的数据,主要功能是持久存储,验证实体的有效性,清楚不需要的信息,当也被爬虫解析后,将被发送到项目管道,经过几个特点的次序处理数据

四 下载中间件

  1. class QiubaipageproDownloaderMiddleware(object):
  2.  
  3. #拦截请求
  4. def process_request(self, request, spider):
  5. #设置代理
  6. request.meta['proxy']='119.176.66.90:9999'
  7. print('this is process_request')
  8.  
  9. #拦截响应
  10. def process_response(self, request, response, spider):
  11. # Called with the response returned from the downloader.
  12.  
  13. # Must either;
  14. # - return a Response object
  15. # - return a Request object
  16. # - or raise IgnoreRequest
  17. return response
  18.  
  19. #拦截发生异常的请求对象
  20. def process_exception(self, request, exception, spider):
  21. # 设置代理
  22. request.meta['proxy'] = 'https:119.176.66.90:9999'
  23. print('this is process_request')

setting中开启下载中间键

  1. DOWNLOADER_MIDDLEWARES = {
  2. 'QiubaiPagePro.middlewares.QiubaipageproDownloaderMiddleware': 543,
  3. }

五 boss直聘爬取

  • bossspider.py 爬虫文件
  1. # -*- coding: utf-8 -*-
  2. import scrapy
  3. from BossPro.items import BossproItem
  4.  
  5. class BossspiderSpider(scrapy.Spider):
  6. name = 'bossspider'
  7. # allowed_domains = ['boss.com']
  8. start_urls = ['https://www.zhipin.com/c101280600/?query=python%E7%88%AC%E8%99%AB&ka=sel-city-101280600']
  9.  
  10. def parse(self, response):
  11. li_list=response.xpath('//div[@class="job-list"]/ul/li')
  12. for li in li_list:
  13. job_name=li.xpath('.//div[@class="job-title"]/text()').extract_first()
  14. company_name=li.xpath('.//div[@class="info-company"]/div[1]/h3/a/text()').extract_first()
  15. detail_url='https://www.zhipin.com'+li.xpath('.//div[@class="info-primary"]/h3/a/@href').extract_first()
  16. #实例项目对象,给管道传输数据
  17. item=BossproItem()
  18. item['job_name']=job_name.strip()
  19. item['company_name']=company_name.strip()
  20.  
  21. #手动发起get请求,并通过meta给回调函数传参
  22. yield scrapy.Request(url=detail_url,callback=self.parse_detail,meta={'item':item})
  23.  
  24. def parse_detail(self,response):
  25. #从meta中取出参数item
  26. item=response.meta['item']
  27. job_desc = response.xpath('//*[@id="main"]/div[3]/div/div[2]/div[2]/div[1]/div//text()').extract()
  28. job_desc = ''.join(job_desc).strip()
  29. job_desc=job_desc.replace(';','\n')
  30. job_desc = job_desc.replace(';', '\n')
  31. job_desc = job_desc.replace('。', '\n')
  32. item['job_desc']=job_desc
  33.  
  34. yield item
  • items.py
  1. import scrapy
  2.  
  3. class BossproItem(scrapy.Item):
  4. # define the fields for your item here like:
  5. # name = scrapy.Field()
  6. job_name = scrapy.Field()
  7. company_name = scrapy.Field()
  8. job_desc = scrapy.Field()
  • pipelines.py
  1. # -*- coding: utf-8 -*-
  2.  
  3. # Define your item pipelines here
  4. #
  5. # Don't forget to add your pipeline to the ITEM_PIPELINES setting
  6. # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
  7.  
  8. class BossproPipeline(object):
  9. fp=None
  10.  
  11. def open_spider(self,spider):
  12. self.fp=open('boss.txt','w',encoding='utf-8')
  13.  
  14. def process_item(self, item, spider):
  15. # print(item)
  16. self.fp.write(item['job_name']+":"+item['company_name'])
  17. self.fp.write('\n'+item['job_desc']+'\n\n')
  18. return item
  19.  
  20. def close_spider(self,spider):
  21. pass
  • setings.py
  1. USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36' #UA
  2.  
  3. ROBOTSTXT_OBEY = False #不遵从robots协议
  4.  
  5. ITEM_PIPELINES = {
  6. 'BossPro.pipelines.BossproPipeline': 300, #开启item_pipelines
  7. }

爬虫系列---scrapy post请求、框架组件和下载中间件+boss直聘爬取的更多相关文章

  1. Python爬虫——Scrapy整合Selenium案例分析(BOSS直聘)

    概述 本文主要介绍scrapy架构图.组建.工作流程,以及结合selenium boss直聘爬虫案例分析 架构图 组件 Scrapy 引擎(Engine) 引擎负责控制数据流在系统中所有组件中流动,并 ...

  2. scrapy——7 scrapy-redis分布式爬虫,用药助手实战,Boss直聘实战,阿布云代理设置

    scrapy——7 什么是scrapy-redis 怎么安装scrapy-redis scrapy-redis常用配置文件 scrapy-redis键名介绍 实战-利用scrapy-redis分布式爬 ...

  3. Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗

    Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗 零.致谢 感谢BOSS直聘相对权威的招聘信息,使本人有了这次比较有意思的研究之旅. 由于爬虫持续爬取 www.zhipin.com 网 ...

  4. Scrapy 爬取BOSS直聘关于Python招聘岗位

    年前的时候想看下招聘Python的岗位有多少,当时考虑目前比较流行的招聘网站就属于boss直聘,所以使用Scrapy来爬取下boss直聘的Python岗位. 1.首先我们创建一个Scrapy 工程 s ...

  5. Python的scrapy之爬取boss直聘网站

    在我们的项目中,单单分析一个51job网站的工作职位可能爬取结果不太理想,所以我又爬取了boss直聘网的工作,不过boss直聘的网站一次只能展示300个职位,所以我们一次也只能爬取300个职位. jo ...

  6. python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!!

    今天 小帅b想给大家讲一个小明的小故事 ... 话说 在很久很久以前 小明不小心发现了一个叫做 学习python的正确姿势 的公众号 从此一发不可收拾 看到什么网站都想爬取 有一天 小明发现了一个小黄 ...

  7. Python 网络爬虫 006 (编程) 解决下载(或叫:爬取)到的网页乱码问题

    解决下载(或叫:爬取)到的网页乱码问题 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:PyCharm 20 ...

  8. Python 网络爬虫 005 (编程) 如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫

    如何编写一个可以 下载(或叫:爬取)一个网页 的网络爬虫 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 Python 的集成开发环境:P ...

  9. 爬虫系列---scrapy全栈数据爬取框架(Crawlspider)

    一 简介 crawlspider 是Spider的一个子类,除了继承spider的功能特性外,还派生了自己更加强大的功能. LinkExtractors链接提取器,Rule规则解析器. 二 强大的链接 ...

随机推荐

  1. 华为oj之字符串分割

    题目: 字符串分隔 热度指数:6139 时间限制:1秒 空间限制:32768K 本题知识点: 字符串 题目描述 •连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组: •连续输入字符串, ...

  2. OKR与Scrum如何强强联手

    我们收到很多问题询问如何把OKR和其他框架结合起来使用,以便管理组织的人员.流程和活动. 软件开发公司最喜欢用的框架之一就是Scrum,Scrum是一个诞生于20世纪90年代的软件开发框架,我们公司内 ...

  3. ThreadPoolExecutor系列一——ThreadPoolExecutor 机制

    ThreadPoolExecutor 机制 本文系作者原创,转载请注明出处:http://www.cnblogs.com/further-further-further/p/7681529.html ...

  4. RabbitMQ消息队列(十)-高可用集群部署实战

    前几章讲到RabbitMQ单主机模式的搭建和使用,我们在实际生产环境中出于对性能还有可用性的考虑会采用集群的模式来部署RabbitMQ. RabbitMQ集群基本概念 Rabbit模式大概分为以下三种 ...

  5. 基于open62541的opc ua 服务器开发实现(1)

    关于opcua的介绍这里就不多说了,相信大家大都有了一些了解,open62541是一个开源C(C99)的opc-ua实现,开源代码可在官网或github上下载. 话不多说,首先搭建一个opcua服务器 ...

  6. springmvc 项目完整示例08 前台页面以及知识点总结

    至此已经基本测试成功了,我们稍作完善,让它成为一个更加完整的项目 我们现在重新规划下逻辑 两个页面 一个登录页面 一个欢迎页面 登陆页面输入账号密码,登陆成功的话,跳转登陆成功 欢迎页面 并且,更新用 ...

  7. Python+AutoIt实现界面工具开发

    前言 不同于Linux服务器上的命令行操作,在windows系统上用户的使用习惯还是倾向于使用有界面的工具.如果工具是命令行交互操作的方式,可能是有悖于在windows上使用的操作习惯,往往不容易推广 ...

  8. Aooms_微服务基础开发平台实战_001_开篇

    一.引子 “ 微服务”近年来很火的一个词,如今的热度不亚于当年的SSH组合,各种开发框架.中间件.容器.概念层出不穷. 比如:dubbo.motan.zookeeper.springboot.spri ...

  9. 你必须知道的.net读书笔记第四回:后来居上:class和struct

     基本概念 1.1. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段.属性.方法.属性.构造函数.索引器.操作符等.因为是基本的概念,所以不必在此 ...

  10. 配置多个git账号的ssh密钥

    博客改版,请直接访问新版文章:https://www.cnblogs.com/xiaoxi666/p/9975981.html 背景 我们在工作中会以 ssh 的方式配置公司的 git 账号,但是平时 ...