自定义 scrapy 爬虫的 requests

之前使用 scrapy 抓取数据的时候 ,默认是在逻辑中判断是否执行下一次请求

def parse(self):
    # 获取所有的url,例如获取到urls中
    for url in urls:
        yield Request(url)

比如:

def parse(self,response):
    item = MovieItem()
    selector = Selector(response)
    Movies = selector.xpath(‘//div[@class="info"]‘)
    for eachMoive in Movies:
        title = eachMoive.xpath(‘div[@class="hd"]/a/span/text()‘).extract()
        star = eachMoive.xpath(‘div[@class="bd"]/div[@class="star"]/span/em/text()‘).extract()[0]
        quote = eachMoive.xpath(‘div[@class="bd"]/p[@class="quote"]/span/text()‘).extract()
        nextLink = selector.xpath(‘//span[@class="next"]/link/@href‘).extract()
    #下一页
    if nextLink:
        nextLink = nextLink[0]
        yield Request(self.url + nextLink,callback=self.parse)

今天无意查看了 scrapy 的官方文档,可以使用 start_requests() 这个方法循环生成要爬取的网址

  def start_requests(self):
        urls=[]
        for i in range(1,10):
            url=‘http://www.test.com/?page=%s‘%i
            page=scrapy.Request(url)
            urls.append(page)
        return urls

使用 python 一定要简单粗暴,于是把我把之前代码换了如下方式

    # 开始URL
    start_urls = [
      "http://q.stock.sohu.com"
    ]

    #定义爬取的URL
    def start_requests(self):
        # 按日
        return [Request(("http://q.stock.sohu.com/hisHq?code=cn_{0}"+"&start=" + self.begin_date + "&end=" + self.end_date + "&stat=1&order=D&period=d&rt=json&r=0.6618998353094041&0.8423532517054869").format(x[‘code‘])) for x in self.stock_basics]

注意:要注意的是重写 start_requests 这个方法,则不需要设置 start_urls 了 ,并且写了 start_urls 也没有用

This method must return an iterable with the first Requests to crawl for this spider.
This is the method called by Scrapy when the spider is opened for scraping when no particular URLs are specified. If particular URLs are specified, the make_requests_from_url() is used instead to create the Requests. This method is also called only once from Scrapy, so it’s safe to implement it as a generator.
The default implementation uses make_requests_from_url() to generate Requests for each url in start_urls.

REFER:
http://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.spiders.Spider.start_requests
python爬虫----(scrapy框架提高(1),自定义Request爬取)
https://my.oschina.net/lpe234/blog/342741

时间: 2024-10-05 16:20:45

自定义 scrapy 爬虫的 requests的相关文章

同时运行多个scrapy爬虫的几种方法(自定义scrapy项目命令)

试想一下,前面做的实验和例子都只有一个spider.然而,现实的开发的爬虫肯定不止一个.既然这样,那么就会有如下几个问题:1.在同一个项目中怎么创建多个爬虫的呢?2.多个爬虫的时候是怎么将他们运行起来呢? 说明:本文章是基于前面几篇文章和实验的基础上完成的.如果您错过了,或者有疑惑的地方可以在此查看: 安装python爬虫scrapy踩过的那些坑和编程外的思考 scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 scrapy爬虫成长日记之将抓取内容写入mysql数据库 如何让

如何让你的scrapy爬虫不再被ban之二(利用第三方平台crawlera做scrapy爬虫防屏蔽)

我们在做scrapy爬虫的时候,爬虫经常被ban是常态.然而前面的文章如何让你的scrapy爬虫不再被ban,介绍了scrapy爬虫防屏蔽的各种策略组合.前面采用的是禁用cookies.动态设置user agent.代理IP和VPN等一系列的措施组合来防止爬虫被ban.除此以外官方文档还介绍了采用Google cache和crawlera的方法.这里就着重介绍一下如何利用crawlera来达到爬虫不被ban的效果.crawlera是一个利用代理IP地址池来做分布式下载的第三方平台,除了scrap

Python Scrapy爬虫(上)

Python Scrapy爬虫 预备知识: 1.Scrapy框架:是用纯Python实现一个为了爬取网站数据.提取结构性数据而编写的应用框架. 2.Scrapy去重原理:Scrapy本身自带有一个中间件.scrapy源码中可以找到一个dupefilters.py去重器,需要将dont_filter设置为False开启去重,默认是True,没有开启去重. 3.指纹去重:对于每一个URL的请求,调度器都会根据请求得相关信息加密得到一个指纹信息,并且将该URL的指纹信息和set()集合中的指纹信息进行

Python 爬虫-Scrapy爬虫框架

2017-07-29 17:50:29 Scrapy是一个快速功能强大的网络爬虫框架. Scrapy不是一个函数功能库,而是一个爬虫框架.爬虫框架是实现爬虫功能的一个软件结构和功能组件集合.爬虫框架是一个半成品,能够帮助用户实现专业网络爬虫.  一.Scrapy框架介绍 5+2结构,5个主要模块加2个中间件. (1)Engine:控制所有模块之间的数据流:根据条件触发事件.不需要用户修改 (2)Downloader:根据请求下载网页.不需要用户修改 (3)Scheduler:对所有爬取请求进行调

scrapy爬虫成长日记之将抓取内容写入mysql数据库

前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我们日常的实际应用,接下来看下如何将抓取的内容保存在常见的mysql数据库中吧. 说明:所有的操作都是在“scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据”的基础上完成,如果您错过了这篇文章可以移步这里查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据 环

一个咸鱼的python爬虫之路(五):scrapy 爬虫框架

介绍一下scrapy 爬虫框架 安装方法 pip install scrapy 就可以实现安装了.我自己用anaconda 命令为conda install scrapy. 1 Engine从Spider处获得爬取请求(Request)2Engine将爬取请求转发给Scheduler,用于调度 3 Engine从Scheduler处获得下一个要爬取的请求4 Engine将爬取请求通过中间件发送给Downloader5 爬取网页后,Downloader形成响应(Response)通过中间件发给En

Scrapy爬虫框架第一讲(Linux环境)

1.What is Scrapy? 答:Scrapy是一个使用python语言(基于Twistec框架)编写的开源网络爬虫框架,其结构清晰.模块之间的耦合程度低,具有较强的扩张性,能满足各种需求.(前面我们介绍了使用requests.beautifulsoup.selenium等相当于你写作文题,主要针对的是个人爬虫:而Scrapy框架的出现给了我们一个方便灵活爬虫程序架构,我们只需针对其中的组件做更改,即可实现一个完美的网络爬虫,相当于你做填空题!) 基于Scrapy的使用方便性,下面所有的S

Python爬虫教程-31-创建 Scrapy 爬虫框架项目

本篇是介绍在 Anaconda 环境下,创建 Scrapy 爬虫框架项目的步骤,且介绍比较详细 Python爬虫教程-31-创建 Scrapy 爬虫框架项目 首先说一下,本篇是在 Anaconda 环境下,所以如果没有安装 Anaconda 请先到官网下载安装 Anaconda 下载地址:https://www.anaconda.com/download/ Scrapy 爬虫框架项目的创建 0.打开[cmd] 1.进入你要使用的 Anaconda 环境 1.环境名可以在[Pycharm]的[Se

Scrapy 爬虫模拟登陆的3种策略

1   Scrapy 爬虫模拟登陆策略 前面学习了爬虫的很多知识,都是分析 HTML.json 数据,有很多的网站为了反爬虫,除了需要高可用代理 IP 地址池外,还需要登录,登录的时候不仅仅需要输入账户名和密码,而且有可能验证码,下面就介绍 Scrapy 爬虫模拟登陆的几种策略. 1.1  策略一:直接POST请求登录 前面介绍的爬虫 scrapy 的基本请求流程是 start_request 方法遍历 start_urls 列表,然后 make_requests_from_url方法,里面执行