当前位置: 首页 > 面试题库 >

Scrapy CrawlSpider不会抓取第一个登录页面

乔鸿骞
2023-03-14
问题内容

我是Scrapy的新手,正在从事刮擦练习,并且正在使用CrawlSpider。尽管Scrapy框架运行良好并且遵循相关链接,但我似乎无法使CrawlSpider抓取第一个链接(主页/登录页面)。相反,它直接刮取规则确定的链接,但不刮取链接所在的登录页面。我不知道如何解决此问题,因为不建议覆盖CrawlSpider的parse方法。修改follow
= True / False也不会产生任何好的结果。这是代码片段:

class DownloadSpider(CrawlSpider):
    name = 'downloader'
    allowed_domains = ['bnt-chemicals.de']
    start_urls = [
        "http://www.bnt-chemicals.de"        
        ]
    rules = (   
        Rule(SgmlLinkExtractor(aloow='prod'), callback='parse_item', follow=True),
        )
    fname = 1

    def parse_item(self, response):
        open(str(self.fname)+ '.txt', 'a').write(response.url)
        open(str(self.fname)+ '.txt', 'a').write(','+ str(response.meta['depth']))
        open(str(self.fname)+ '.txt', 'a').write('\n')
        open(str(self.fname)+ '.txt', 'a').write(response.body)
        open(str(self.fname)+ '.txt', 'a').write('\n')
        self.fname = self.fname + 1

问题答案:

只需将回调更改为parse_start_url并覆盖它即可:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor

class DownloadSpider(CrawlSpider):
    name = 'downloader'
    allowed_domains = ['bnt-chemicals.de']
    start_urls = [
        "http://www.bnt-chemicals.de",
    ]
    rules = (
        Rule(SgmlLinkExtractor(allow='prod'), callback='parse_start_url', follow=True),
    )
    fname = 0

    def parse_start_url(self, response):
        self.fname += 1
        fname = '%s.txt' % self.fname

        with open(fname, 'w') as f:
            f.write('%s, %s\n' % (response.url, response.meta.get('depth', 0)))
            f.write('%s\n' % response.body)


 类似资料:
  • 我现在一直在努力使用我的登录页面来让组件呈现Loggedin组件。我的前端是Reactjs,后端是NodeJS。我对nodejs、expression和react都是新手。 在loginform组件上,我使用fetch进行了一次post,它将用户名和密码传递给后端的相应endpoint。没问题。在后端,它读取我存储用户(不使用任何数据库)的jsonfile来查找匹配项,如果用户名和密码都匹配,则它

  • 问题内容: 我已经通过Scrapy文档今天一直在进行,并试图获得一个工作版本- https://docs.scrapy.org/en/latest/intro/tutorial.html#our-first- spider -在现实世界的例子。我的示例稍有不同,它有2个下一页,即 start_url>城市页面>单位页面 这是我要从中获取数据的单位页面。 我的代码: 但是当我运行它时,我得到: 因此

  • 你好,我有麻烦试图刮数据从一个网站的建模目的(Fantsylabs dotcom)。我只是一个黑客,所以原谅我对comp sci行话的无知。我想完成的是... > 使用selenium登录网站,导航到有数据的页面。 这个过程的工作原理是登录,导航到正确的页面,但是一旦页面完成动态加载(30秒),就把它传递给美丽的汤。我在表中看到大约300个实例,我想刮......然而,bs4刮刀只吐出了300个实

  • 我有一个博客页面的文章,我试图使用CodeIgniter分页。编号和限制似乎工作正常,除了当我试图旅行到另一页时,我一直得到一个404。 奇怪的是,导致这个问题的正常罪魁祸首是正确的。baseUrl和uri_段。 我的控制器如下所示: 然后在我的模型中,我抓住柱子 我的完整URL是,然后分页显示为www.mysite。com/blog/2。 对于base\u Url,我也尝试了

  • 问题内容: 如果我想抓取一个需要先使用密码登录的网站,我该如何使用beautifulsoup4库开始使用python抓取它?以下是我对不需要登录的网站的处理方式。 应该如何更改代码以适应登录?假设我要抓取的网站是一个需要登录的论坛。一个示例是http://forum.arduino.cc/index.php 问题答案: 您可以使用机械化: 或urllib-使用urllib2登录网站

  • 我有一个使用SpringMVC的Java网络应用程序。该 Web 应用程序在 jboss AS7.1 服务器上运行,该服务器使用带有表单认证的 JAAS 登录模块。当用户在表单上填写其用户名和密码时,登录工作顺利。 我现在想创建一个java控制器,它“将用户登录”,就好像用户填写了日志通知一样。 当上述方法完成时,应允许对任何安全页面的任何访问,因为用户被视为已登录。 可以通过访问Jboss的lo