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

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

比如:

  1. def parse(self,response):
  2. item = MovieItem()
  3. selector = Selector(response)
  4. Movies = selector.xpath('//div[@class="info"]')
  5. for eachMoive in Movies:
  6. title = eachMoive.xpath('div[@class="hd"]/a/span/text()').extract()
  7. star = eachMoive.xpath('div[@class="bd"]/div[@class="star"]/span/em/text()').extract()[0]
  8. quote = eachMoive.xpath('div[@class="bd"]/p[@class="quote"]/span/text()').extract()
  9. nextLink = selector.xpath('//span[@class="next"]/link/@href').extract()
  10. #下一页
  11. if nextLink:
  12. nextLink = nextLink[0]
  13. yield Request(self.url + nextLink,callback=self.parse)

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

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

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

  1. # 开始URL
  2. start_urls = [
  3. "http://q.stock.sohu.com"
  4. ]
  5.  
  6. #定义爬取的URL
  7. def start_requests(self):
  8. # 按日
  9. 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 也没有用

  1. This method must return an iterable with the first Requests to crawl for this spider.
  2. 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 its safe to implement it as a generator.
  3. 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

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

  1. 自定义 Scrapy 爬虫请求的 URL

    之前使用 scrapy 抓取数据的时候 ,默认是在逻辑中判断是否执行下一次请求 def parse(self): # 获取所有的url,例如获取到urls中 for url in urls: yiel ...

  2. 第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍

    第三百四十六节,Python分布式爬虫打造搜索引擎Scrapy精讲—Requests请求和Response响应介绍 Requests请求 Requests请求就是我们在爬虫文件写的Requests() ...

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

    试想一下,前面做的实验和例子都只有一个spider.然而,现实的开发的爬虫肯定不止一个.既然这样,那么就会有如下几个问题:1.在同一个项目中怎么创建多个爬虫的呢?2.多个爬虫的时候是怎么将他们运行起来 ...

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

    我们在做scrapy爬虫的时候,爬虫经常被ban是常态.然而前面的文章如何让你的scrapy爬虫不再被ban,介绍了scrapy爬虫防屏蔽的各种策略组合.前面采用的是禁用cookies.动态设置use ...

  5. scrapy爬虫框架setting模块解析

    平时写爬虫的时候并不需要设置setting里所有的参数,今天心血来潮,花了点时间查了一下setting模块创建后自动写入的所有参数的含义,记录一下. 模块相关说明信息 # -*- coding: ut ...

  6. Scrapy爬虫框架(实战篇)【Scrapy框架对接Splash抓取javaScript动态渲染页面】

    (1).前言 动态页面:HTML文档中的部分是由客户端运行JS脚本生成的,即服务器生成部分HTML文档内容,其余的再由客户端生成 静态页面:整个HTML文档是在服务器端生成的,即服务器生成好了,再发送 ...

  7. python3 scrapy爬虫项目的诞生

    前提安装好scrapy模块最好 requests和bs4模块都安装好 可以概括为五个步骤 步骤一:新建一个项目 无论你用windows也好,linux也罢,在cmd或者终端 切换到目标文件夹,然后输入 ...

  8. Scrapy 爬虫

    Scrapy 爬虫 使用指南 完全教程   scrapy note command 全局命令: startproject :在 project_name 文件夹下创建一个名为 project_name ...

  9. [Python爬虫] scrapy爬虫系列 <一>.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

随机推荐

  1. 4.2.1 网络请求之HTTP

    HTTP请求&响应:(常用的只有Post与Get,还有Head/put/delete/connect/options/trace) Get&Post(建议用post规范参数传递方式,并 ...

  2. How to Read a Book

    主题: 讲述阅读的四种层次,以及每种层次所需要的.截然不同的阅读方法. 主要声明与论点: 带着问题阅读,时刻不忘在书中寻找问题的答案: 高速阅读,以最短的时间了解一本书的全貌,然后决定是否值得再次阅读 ...

  3. Kali Linux Web 渗透测试视频教程— 第四课 google hack 实战

    Kali Linux Web 渗透测试— 第四课 google hack 实战 文/玄魂 目录 shellKali Linux Web 渗透测试— 第四课 google hack 实战 课程目录 Go ...

  4. Windows Phone下的Socket编程

    讨论下有关于Windows Phone下的Socket编程方面的知识. Socket就是通常所称的套接字,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过Socket向网络发出请求或者应答 ...

  5. Qt 二级菜单栏 中文无法输入问题

    问题描述:Qt5.3.1版本在建立主界面的二级菜单的时候,中文无法输入,而英文确是可以输入的.(首先我在网页上面搜索了一下,他们说是Qt的设计问题.) 解决方法: (1)粘贴复制,把中文写在其他的地方 ...

  6. Vue学习笔记1

    目录 前言 1.vue和avalon一样,都不支持VM初始时不存在的属性 2.input元素中属性与v-model同时存在以属性为优先 3.VM中的函数放到data属性和methods属性中的区别,以 ...

  7. 使用paramikoHelper类实现MySQL安装和数据恢复

    本脚本实现远程Linux主机登陆和安装MySQL的rpm包,同时导入mysql数据,实现自动化安装 paramikoHelper类在本博客中 http://www.cnblogs.com/djoker ...

  8. 隐藏路由器的WIFI信号,防蹭网

    进入路由器的管理界面 最后别忘了 现在信号隐藏了,现在说一下如何用手机连接隐藏的路由器

  9. iOS开发之静态库(二)—— .a

    前面已经介绍了iOS中静态库的基本概念和特点,这里就不再多废话,直接上代码 编译环境Xcode5.1 + Mac OS X 10.9.3 新建静态库项目 Xcode中创建静态库的模板有两个,一个是创建 ...

  10. jQuery的简单入门练习

    <html> <head> <meta charset="utf-8"> <title>jQuery的练习</title> ...