首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何修复Scrapy在深度爬行中不起作用

如何修复Scrapy在深度爬行中不起作用
EN

Stack Overflow用户
提问于 2017-02-28 17:15:15
回答 2查看 504关注 0票数 1

我目前正在尝试使用scrapy创建一个小型的web抓取原型。我目前的问题与链接提取和跟踪相关。

我试图让scrapy浏览页面并找到指向页面的链接(目前不是图像和其他内容),但我不知道如何正确设置参数。

这是我正在使用的蜘蛛:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DefaultSpider(CrawlSpider):

    name = "default"
    session_id = -1
    rules = [Rule(LinkExtractor(allow=()),callback='parse', follow=True)]
        
def start_requests(self):
     #not relevent code that gives an URL list to be scrawled
     for url in listurl:

     #make scrapy follow only the current domain url.
     self.rules[0].allow=url
        yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
     page = Website(response.url,response.text)
     DBInterface.store(page)

蜘蛛似乎在页面中找不到任何链接。我想我做得不对。我尝试将另一个函数作为回调函数,而不是解析方法。(同时修改规则回调参数)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def processlinks (self,response)
    page = Website(response.url,response.text)
    DBInterface.store(page)

编辑:更新代码+标题以正确理解..

EN

回答 2

Stack Overflow用户

发布于 2017-02-28 18:26:36

CrawlSpider是一种特殊的爬行器,它添加了rules支持来跟踪链接(而不是提取链接)。

要让这个爬行器工作,需要can't override start_requestsparse方法

关于获取链接,我建议使用LinkExtractor,它使提取更干净:

来自scrapy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def find_links(self, response):
    for link in LinkExtractor().extract_links(response):
        logging.info('Extracting new url' + link.url)
        yield scrapy.Request(link.url, callback=self.insert_linkDB)

欲了解更多有关LinkExtractor的最新信息,请访问in the documentation

票数 0
EN

Stack Overflow用户

发布于 2017-05-30 00:38:51

要使CrawlSpider处理初始URL的方式与随后使用LinkExtractor提取的URL相同,这有些棘手,这正是您在这里想要的。问题是,您的不应该为您手动发起的任何请求定义自定义回调,因为这将阻止LinkExtractor工作。另一方面,您希望对每个爬行的URL执行一些操作,包括初始URL。对于那些使用LinkExtractor提取的URL,您可以在定义规则时提供回调,但这显然不适用于未使用这些规则提取的初始URL。为此,Scrapy提供了另一个方法parse_start_url(response),您可以并且应该重写该方法。因此,在您的示例中,以下代码将执行您想要的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class DefaultSpider(CrawlSpider):

    name = "default"
    session_id = -1
    rules = [Rule(LinkExtractor(allow=()),callback='parse_results', follow=True)]

def start_requests(self):
     #not relevent code that gives an URL list to be scrawled
     for url in listurl:

     #make scrappy follow only the current domain url.
     self.rules[0].allow=url
        yield scrapy.Request(url=url)

def parse_start_url(self, response):
     self.parse_results(response)

def parse_results(self, response):
     page = Website(response.url,response.text)
     DBInterface.store(page)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42514918

复制
相关文章
在Scrapy中如何使用aiohttp?
当我们从一些代理IP供应商购买代理IP时,他们可能是提供一个网址供我们查询当前可用的代理IP。我们周期性访问这个网址,拿到最新的IP,再分给爬虫使用。
青南
2020/07/16
6.5K0
scrapy在cmd中检查
1,scrapy shell 2,fetch('http://gk.scsn.gov.cn/Search.aspx?columnId=40012') 抓取网页 3。response.xpath('//
Centy Zhao
2019/12/26
7660
为什么 strace 在 Docker 中不起作用?
在编辑“容器如何工作”爱好者杂志的能力页面时,我想试着解释一下为什么 strace 在 Docker 容器中无法工作。
用户8639654
2021/09/18
6.5K0
scrapy0700:深度爬虫scrapy深度爬虫
爬虫程序,主要是用与数据采集处理的一种网络程序,在操作过程中针对指定的url地址进行数据请求并根据需要采集数据,但是在实际项目开发过程中,经常会遇到目标url地址数量不明确的情况,如之前的章节中提到的智联招聘项目,不同的岗位搜索到的岗位数量不一定一致,也就意味着每个工作搜索到的工作岗位列表页面的数量不一定一致,爬虫工程师工作可能搜索到了10页,Django工作有可能都索到了25页数据,那么针对这样的数据要全部进行爬取,应该怎么处理呢?答案就是:深度爬虫
大牧莫邪
2018/08/27
1.9K0
在bootstrap中col-md-offset-* 偏移不起作用
在bootstrap中,使用col-md-offset-1、col-md-offset-2、col-md-offset-3、col-md-offset-4等来设置偏移量很常见,但最近就遇到一个问题了,在最新版的bootstrap4.5中,这个值不起作用了。
kirin
2020/10/27
12.6K1
Scrapy常见问题
scrapy 是一个快速(fast)、高层次(high-level)的基于 python 的 web 爬虫构架,用于抓取web站点并从页面中提取结构化的数据。scrapy 使用了 Twisted异步网络库来处理网络通讯。
李玺
2021/11/22
1.2K0
Scrapy常见问题
016:Scrapy使用中必须得会的问题
(1)优点:scrapy 是异步的 采取可读性更强的 xpath 代替正则强大的统计和 log 系统,同时在不同的 url 上爬行支持 shell 方式,方便独立调试写 middleware,方便写一些统一的过滤器,通过管道的方式存入数据库 (2)缺点:基于 python 的爬虫框架,扩展性比较差 基于 twisted 框架,运行中的 exception 是不会干掉 reactor,并且异步框架出错后是不会停掉其他任务的,数据出错后难以察觉。
李玺
2021/11/22
1.6K0
016:Scrapy使用中必须得会的问题
List.append() 在 Python 中不起作用,该怎么解决?
Python 是一种强大而灵活的编程语言,它提供了许多方便的数据结构和操作方法,其中之一就是列表(List)。列表是一个有序的集合,可以包含不同类型的元素,并且可以进行添加、删除和修改等操作。在 Python 中,我们通常使用 List.append() 方法向列表末尾添加元素。然而,在某些情况下,你可能会遇到 List.append() 方法不起作用的问题。本文将详细讨论这个问题并提供解决方法。
网络技术联盟站
2023/06/01
2.8K0
修复spring mvc拦截器不起作用的bug
今天在做springmvc登录过滤拦截器的时候,发现虽然写了mvc:exclude-mapping,但是login依旧走了拦截器,很是费解,后来请教了负责人,原来是前面少了一个/
Meet相识
2018/09/12
2.1K0
一日一技:如何正确在 PyCharm 中调试 Scrapy 爬虫?
最近有不少同学在粉丝群里面问,如何调试Scrapy 爬虫。有些人不知道如何让 Scrapy 爬虫进入调试模式;还有一些人不知道怎么单步调试。
青南
2021/06/23
3K0
一日一技:如何正确在 PyCharm 中调试 Scrapy 爬虫?
一日一技:在Scrapy中如何拼接URL Query参数?
我们知道,在使用Requests发起GET请求时,可以通过params参数来传递URL参数,让Requests在背后帮你把URL拼接完整。例如下面这段代码:
青南
2023/09/11
5610
一日一技:在Scrapy中如何拼接URL Query参数?
[GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(中)
上一篇文章--[GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(上)中,我们先介绍了对于图像修复的背景,需要利用什么信息来对缺失的区域进行修复,以及将图像当做概率分布采样的样本来看待,通过这个思路来开始进行图像的修复。
kbsc13
2019/08/16
7310
如何修复Vue中的 “this is undefined” 问题
别担心,不只有你一个人,我也经常遇到这个问题很多次,接下我们一起来看看如何解决这个问题。
前端小智@大迁世界
2020/05/12
5.1K0
Scrapy中如何提高数据的插入速度
速度问题 最近工作中遇到这么一个问题,全站抓取时采用分布式:爬虫A与爬虫B,爬虫A给爬虫B喂饼,爬虫B由于各种原因运行的比较慢,达不到预期效果,所以必须对爬虫B进行优化。 提升Scrapy运行速度有很多方法,国外有大佬说过 Speed up web scraper Here's a collection of things to try: use latest scrapy version (if not using already) check if non-standard middlewares a
小歪
2018/04/04
2.5K0
Scrapy中如何提高数据的插入速度
关于scrapy中scrapy.Request中的属性
填写的参数:响应返回的回调函数(必须是类当中或者父类当中的方法),默认为parse方法
小小咸鱼YwY
2020/06/19
6590
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)。今天小编给大家介绍Scrapy中另外一种选择器,即大家经常听说的CSS选择器。
Python进阶者
2020/11/03
3K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
前几天给大家分享了Xpath语法的简易使用教程,没来得及上车的小伙伴可以戳这篇文章:在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(上篇)、在Scrapy中如何利用Xpath选择器从网页中采集目标数据——详细教程(下篇)、在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇)。之前还给大家分享了在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(上篇),没来得及上车的小伙伴可以戳进去看看,今天继续上篇的内容往下进行。
Python进阶者
2020/11/03
2.6K0
在Scrapy中如何利用CSS选择器从网页中采集目标数据——详细教程(下篇)
深度学习的图像修复
修复指的是恢复图像损失的部分并且基于背景信息将它们重建的技术。它指的是在视觉输入的指定区域中填充缺失数据的过程。在数字世界中,它指的是应用复杂算法以替代图像数据中缺失或者损坏部分。
AI研习社
2019/05/08
1.1K0
深度学习的图像修复
[常见问题]在Linux下执行Redis命令不起作用.
redis 127.0.0.1:6379> 这个后面无论输入什么命令都没有返回 ok 或者其他的信息,一直保持截图的状态: 解决方法: 在SecureCRT中设置Options-->SessionO
一枝花算不算浪漫
2018/05/18
1.9K0
点击加载更多

相似问题

在深度爬行不起作用

13

如何使用Scrapy在页面中爬行?

11

在Scrapy中重写parse_start_url()并将爬行深度限制在1

111

用Scrapy爬行一定深度的简单网站

14

在scrapy中连接爬行器

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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