Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在scrapy的start_requests()中返回项目

我正在写一个抓取许多urls作为输入的爬虫,并将它们分类为类别(作为项目返回)。这些URL通过我的爬虫提供给爬虫start_requests()方法。

有些网址可以在不下载的情况下进行分类,所以我想yield直接使用Item为他们在start_requests(),这是scrapy所禁止的。我怎么才能绕过这一步呢?

我曾考虑过在自定义中间件中捕获这些请求,这将使它们变成虚假的Response对象,然后我可以将它们转换为Item对象,但任何更简洁的解决方案都是受欢迎的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-10 14:00:11

我认为使用爬虫中间件和重写开始_requests()将是一个很好的开始。

在您的中间件中,您应该遍历start中的所有urls_urls,并且可以使用条件语句来处理不同类型的urls。

  • 对于不需要请求的特殊URL,您可以

直接调用管道的进程_item(),请不要忘记导入您的管道并从您的url为此创建一个scrapy.item

正如您所提到的,在请求中将url作为meta传递,并使用一个单独的解析函数,该函数只返回url。

  • 对于所有剩余的URL,您可以启动一个“普通”请求,因为您可能已经定义了
票数 1
EN

Stack Overflow用户

发布于 2021-02-25 06:25:43

您可以使用Downloader Middleware来完成此工作。

start_requests(),您应该始终发出请求,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def start_requests(self):
    for url in all_urls:
        yield scrapy.Request(url)

但是,您应该编写一个下载器中间件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DirectReturn:
    def process_request(self, request, spider):
        image_url = request.url
        if url in direct_return_url_set:
            resp = Response(image_url, request=request)
            request.meta['direct_return_url': True]
            return resp
        else:
            return request

然后,在您的parse方法,只需检查键direct_return_urlresponse.meta。如果是,只需生成一个项目并将response.url放入该项目,然后生成该项目。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35300052

复制
相关文章
Scrapy:重写start_requests方法
有时scrapy默认的start_requests无法满足我们的需求,例如分页爬取,那就要对它进行重写,添加更多操作。
新码农
2020/04/17
1.7K0
Scrapy:重写start_requests方法
[749]scrapy-redis实现start_requests功能
最近在用scrapy-redis的RedisSpider时,需要在起始请求中添加cookie,发现RedisSpider并不可直接使用start_requests,需要手动实现。
周小董
2020/01/13
1.4K0
scrapy在cmd中检查
1,scrapy shell 2,fetch('http://gk.scsn.gov.cn/Search.aspx?columnId=40012') 抓取网页 3。response.xpath('//
Centy Zhao
2019/12/26
7590
Scrapy 爬虫框架学习记录
安装完 scrapy 后,新建一个爬虫的目录,然后在命令行窗口进入该目录,输入以下命令:
caoqi95
2019/03/28
5810
Scrapy 爬虫框架学习记录
Scrapy spider 主要方法
Spider 类是 Scrapy 中的主要核心类,它定义了爬取网站的规则。 Spider 是循环爬取,它的而爬取步骤是:
喵叔
2020/09/08
8690
Scrapy框架的使用之Scrapyrt的使用
Scrapyrt为Scrapy提供了一个调度的HTTP接口。有了它我们不需要再执行Scrapy命令,而是通过请求一个HTTP接口即可调度Scrapy任务,我们就不需要借助于命令行来启动项目了。如果项目是在远程服务器运行,利用它来启动项目是个不错的选择。 一、本节目标 我们以本章Scrapy入门项目为例来说明Scrapyrt的使用方法,项目源代码地址为:https://github.com/Python3WebSpider/ScrapyTutorial。 二、准备工作 请确保Scrapyrt已经正确安装
崔庆才
2018/06/25
2.2K0
Python之scrapy的post请求、日志和代理
默认的日志等级是DEBUG ,只要出现了DEBUG或者DEBUG以上等级的日志 ,那么这些日志将会打印
鱼找水需要时间
2023/02/16
3740
Python之scrapy的post请求、日志和代理
在Scrapy中如何使用aiohttp?
当我们从一些代理IP供应商购买代理IP时,他们可能是提供一个网址供我们查询当前可用的代理IP。我们周期性访问这个网址,拿到最新的IP,再分给爬虫使用。
青南
2020/07/16
6.5K0
学Scrapy框架没有她可不行哦(爬虫)
国庆70周年 国庆70周年 在Scrapy中,要抓取网站的链接配置、抓取逻辑、解析逻辑里其实都是在Spider中配置的。 Spider要做的事就是有两件:定义抓取网站的动作和分析爬取下来的网页。 1
Python知识大全
2020/02/13
7410
学Scrapy框架没有她可不行哦(爬虫)
Python Scrapy框架之SpiderMiddleware中间件(爬虫))
Spider中间件是介入到Scrapy的spider处理机制的钩子框架,您可以添加代码来处理发送给 Spiders 的response及spider产生的item和request。
Python知识大全
2020/02/13
8760
Python Scrapy框架之SpiderMiddleware中间件(爬虫))
scrapy爬虫框架教程(二)-- 爬取豆瓣电影
经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo。这次我会以爬取豆瓣电影TOP250为例进一步为大家讲解一个完整爬虫的流程。
测试开发社区
2019/09/20
9980
scrapy爬虫框架教程(二)-- 爬取豆瓣电影
Scrapy框架的使用之Spider的用法
在Scrapy中,要抓取网站的链接配置、抓取逻辑、解析逻辑里其实都是在Spider中配置的。在前一节实例中,我们发现抓取逻辑也是在Spider中完成的。本节我们就来专门了解一下Spider的基本用法。 1. Spider运行流程 在实现Scrapy爬虫项目时,最核心的类便是Spider类了,它定义了如何爬取某个网站的流程和解析方式。简单来讲,Spider要做的事就是如下两件: 定义爬取网站的动作; 分析爬取下来的网页。 对于Spider类来说,整个爬取循环过程如下所述: 以初始的URL初始化Reque
崔庆才
2018/06/25
6750
手把手带你入门Python爬虫Scrapy
导读:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
IT阅读排行榜
2020/09/11
1.2K0
手把手带你入门Python爬虫Scrapy
Python 爬虫之Scrapy《上》
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。
Wu_Candy
2022/07/04
3580
Python 爬虫之Scrapy《上》
scrapy爬虫笔记(1):scrapy基本使用
之前在写爬虫时,都是自己写整个爬取过程,例如向目标网站发起请求、解析网站、提取数据、下载数据等,需要自己定义这些实现方法等
冰霜
2022/03/15
3600
scrapy爬虫笔记(1):scrapy基本使用
干货!爬虫框架 Feapder 和 Scrapy 的对比分析
scrapy 自带的重试中间件只支持请求重试,解析函数内异常或者数据入库异常不会重试,但爬虫在请求数据时,往往会有一些意想不到的页面返回来,若我们解析异常了,这条任务岂不是丢了。
崔庆才
2021/10/08
2.4K0
干货!爬虫框架 Feapder 和 Scrapy 的对比分析
Scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
前言 经过上一篇教程我们已经大致了解了Scrapy的基本情况,并写了一个简单的小demo。这次我会以爬取豆瓣电影TOP250为例进一步为大家讲解一个完整爬虫的流程。 工具和环境 语言:python
木制robot
2018/04/13
1.9K0
Scrapy爬虫框架教程(二)-- 爬取豆瓣电影TOP250
Scrapy框架-爬虫程序相关属性和方法汇总
如果不写start_requests方法:他会把start_urls的两个网址都发送过去
小小咸鱼YwY
2020/06/19
6450
Scrapy入门到放弃02:了解整体架构,开发一个程序
Scrapy开门篇写了一些纯理论知识,这第二篇就要直奔主题了。先来讲讲Scrapy的架构,并从零开始开发一个Scrapy爬虫程序。
叫我阿柒啊
2022/05/09
6010
Scrapy入门到放弃02:了解整体架构,开发一个程序
Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法
coders
2018/01/04
9450
Python爬虫从入门到放弃(十五)之 Scrapy框架中Spiders用法

相似问题

Scrapy:无法正确重新启动start_requests()

23

scrapy start_requests未进入回调函数

12

覆盖start_requests是Scrapy不同步的

13

在Scrapy中返回复杂项目(webcrawler)

21

Scrapy:创建项目返回错误

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文