CrawlSpider 与 Splash

2023-12-03

我的蜘蛛有一些问题。我使用 scrapy 的splash 来获取由JavaScript 生成的“下一页”的链接。从第一页下载信息后,我想从以下页面下载信息,但 LinkExtractor 功能无法正常工作。但看起来 start_request 函数不起作用。这是代码:

class ReutersBusinessSpider(CrawlSpider):
   name = 'reuters_business'
   allowed_domains = ["reuters.com"]
   start_urls = (
       'http://reuters.com/news/archive/businessNews?view=page&page=1',
   )

    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url, self.parse, meta={
                'splash': {
                    'endpoint': 'render.html',
                    'args': {'wait': 0.5}
                }
            })
    def use_splash(self, request):
        request.meta['splash'] = {
                'endpoint':'render.html',
                'args':{
                    'wait':0.5,
                    }
                }
        return request

    def process_value(value):
        m = re.search(r'(\?view=page&page=[0-9]&pageSize=10)', value)
        if m:
            return urlparse.urljoin('http://reuters.com/news/archive/businessNews',m.group(1))


    rules = (
        Rule(LinkExtractor(restrict_xpaths='//*[@class="pageNext"]',process_value='process_value'),process_request='use_splash', follow=False),
        Rule(LinkExtractor(restrict_xpaths='//h2/*[contains(@href,"article")]',process_value='process_value'),callback='parse_item'),
    )



    def parse_item(self, response):
        l = ItemLoader(item=PajaczekItem(), response=response)

        l.add_xpath('articlesection','//span[@class="article-section"]/text()', MapCompose(unicode.strip), Join())
        l.add_xpath('date','//span[@class="timestamp"]/text()', MapCompose(parse))
        l.add_value('url',response.url)
        l.add_xpath('articleheadline','//h1[@class="article-headline"]/text()', MapCompose(unicode.title))
        l.add_xpath('articlelocation','//span[@class="location"]/text()')
        l.add_xpath('articletext','//span[@id="articleText"]//p//text()', MapCompose(unicode.strip), Join())

        return l.load_item()

Logs:

2016-02-12 08:20:29 [scrapy] INFO: Spider opened 2016-02-12 08:20:29 [scrapy] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2016-02-12 08:20:29 [scrapy] DEBUG: Telnet console listening on 127.0.0.1:6023
2016-02-12 08:20:38 [scrapy] DEBUG: Crawled (200) <POST localhost:8050/render.html>; (referer: None)
2016-02-12 08:20:38 [scrapy] DEBUG: Filtered offsite request to 'localhost': <GET http://localhost:8050/render.html?page=2&pageSize=10&view=page%3E;
2016-02-12 08:20:38 [scrapy] INFO: Closing spider (finished)

哪里有错误?感谢帮助。


快速浏览一下,您没有使用splash 调用start_request 属性...例如,您应该使用SplashRequest。

def start_requests(self):
    for url in self.start_urls:
        yield SplahRequest(url, self.parse, meta={
            'splash': {
                'endpoint': 'render.html',
                'args': {'wait': 0.5}
            }
        })

假设您已经正确设置了 Splash,即在设置中启用了必要的中间位置并指向正确的 /url 也使它们能够正确启动和 HTTP 缓存...不,我还没有运行您的代码应该很好现在去

编辑:顺便说一句...它不是下一页不是 js 生成的

Next Page not JS generater

所以......除非有任何其他原因你使用splash,我认为没有理由在文章请求的初始解析中使用它一个简单的for循环,例如......

for next in response.css("a.control-nav-next::attr(href)").extract():
    yield scrapy.Request(response.urljoin(next), callback=self.parse...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CrawlSpider 与 Splash 的相关文章

随机推荐

  • 错误代码1安装Scrapy

    我正在尝试安装 Python 的 Scrapy 模块 我正在使用命令 pip install Scrapy 但我收到以下错误 Command Library Frameworks Python framework Versions 2 7
  • openGL 是如何得出公式 F_depth 的,这就是窗口视口变换吗

    point no 1 after transforming points via the projection matrix we end up with the point in the range 1 1 but in the dept
  • 创建实用程序类型以便从两个元组创建对象

    我有两个基本元组 const tuples1 a b c as const const tuples2 1 2 3 as const 我想创建一个将两者结合起来的对象 const ResultMerge a 1 b 2 c 3 我使用 Ty
  • C# 是否可以在静态函数内调用非静态函数?

    是否可以在 C 中的静态函数内调用使用公共非静态类的非静态函数 public class MyProgram private Thread thd new Thread myStaticFunction public AnotherClas
  • 在模块类中找到重复的 android.support.v4.app.INotificationSideChannel 类?

    我正在开发一个新闻应用程序 但我从 gradle 控制台收到以下错误 androidx core core 1 0 1 and classes jar com android support support compat 28 0 0 Du
  • 主动控制更改事件 - MS Access

    我正在寻找一个 MS Access 表单事件 它可以检查表单上的活动控件是否已更改为另一个控件 当它执行时 会运行一个小脚本 该函数必须是仅在表单处于活动状态 例如单击表单等 时运行的函数 但是 Form Click 不起作用 因为它在某种
  • 如何处理在 iOS 5 及更低版本上运行的应用程序的identifierForVendor

    在过去的几天里 我听说 Apple 正在采取措施 以便使用正在运行的设备的 UDID 标识符的应用程序将被 Apple App Store 拒绝 这是我读过这篇文章的地方 他们建议开发人员使用identifierForVender这是在 i
  • 以编程方式确定 iPhone 是否越狱

    如何 以编程方式 确定 iPhone iPod 是否 越狱 运行软件的破解副本 捏媒体可以检测手机是否越狱或者运行的软件是否被破解 有人知道他们是怎么做到的吗 有图书馆吗 Here是检测您的应用程序是否被破解的方法之一 简而言之 破解通常需
  • Facebook API,如何获取好友的关系状态(单身、已婚等...)?

    有人可以帮助我使用 Facebook API 如何获取朋友的关系状态 单身 已婚等 谢谢你的帮助 您只需要获取访问令牌即可用户关系 call https graph facebook com YOURFRIEND ID并检查返回的 JSON
  • 有没有好的C语言集合库? [复制]

    这个问题在这里已经有答案了 可能的重复 C 容器类 库 我们必须维护甚至开发遗留系统的 C 代码 是否有好的集合库可以支持 Java C 新版本 样式集合 Hashtable HashSet 等 当然没有对象 但是有结构体 HashTabl
  • DacFx DeploymentPlanExecutor OnExecute 未调用

    我正在尝试编写一个自定义程序DeploymentPlanExecutor使用 Microsoft 的 DacFx 3 0 但OnExecute 方法从未被调用 如果我使用相同的DeploymentPlanModifier反而 OnExecu
  • Flask 管理:向嵌入文档内的 SelectField 添加动态选择

    我在嵌入文档中有一个字符串字段 并将该字段覆盖为选定字段 覆盖后 我添加一个空的选择列表作为所选字段的参数 问题是 在表单访问中 我们尝试向所选字段添加一些动态选择 但由于某种原因 这失败了 我们如何添加一些动态选择 我需要使用某种预处理器
  • 百分比值的小数格式?

    我想要的是这样的 String Format Value 0 0 8526 其中 是该格式提供程序或我正在寻找的任何内容 应该结果 Value 85 26 我基本上需要它来进行 wpf 绑定 但首先让我们解决一般格式问题
  • Android“无法添加窗口 - 令牌 null 不适用于应用程序”异常

    当我尝试打开对话框时 出现以下 Android 异常 有人可以帮助我了解发生了什么事以及如何解决这个问题吗 android view WindowManager BadTokenException Unable to add window
  • 如何将每个换行符转换/替换为“
    ”?

    set tabstop 4 set shiftwidth 4 set nu set ai syntax on filetype plugin indent on 我试过这个 content gsub r n br 但是当我单击视图 显示按钮
  • 将日期字符串转换为不同的格式

    我有一个包含格式为日期的字符串YYYY MM DD 您建议我如何将其转换为格式DD MM YYYY以最好的方式 这就是我天真的做法 import java util public class test public static void
  • 在 grid.arrange 中保留或设置文本标签与绘图大小之间的比例

    我正在尝试安排使用创建的 2 个图ggplot2并希望这些图的大小为正方形 并且一个挨着另一个 旁边有共同的图例 以便图像非常适合纵向风格的页面 问题是当我使用grid arrange为了安排格罗布 标签和图例变得很小 而情节空间却很大 g
  • JFormattedTextField 格式化百分比数字?

    我想使用 JFormattedTextField 将浮点数格式化为百分比值 允许输入 0 到 100 转换为 0 0f 1 0f 始终显示百分号并不允许任何无效字符 现在我已经尝试了一些 NumberFormat getPercentIns
  • boost::asio::read 函数挂起

    如果有人可以帮助我 我无法理解 boost asio read 函数在 boost asio 中的工作原理 在 boost 的示例中 他们在接收消息之前声明缓冲区大小 这是没有意义的 我如何知道在读取消息之前要读取多少字节 我尝试了这段代码
  • CrawlSpider 与 Splash

    我的蜘蛛有一些问题 我使用 scrapy 的splash 来获取由JavaScript 生成的 下一页 的链接 从第一页下载信息后 我想从以下页面下载信息 但 LinkExtractor 功能无法正常工作 但看起来 start reques