繁体   English   中英

如何将循环的 url 列表传递给 Scrapy (url="")

How to pass a looped list of urls to Scrapy (url="")

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个循环创建我想要抓取的链接:

    start_date = date(2020, 1, 1)
    end_date = date.today()
    crawl_date = start_date
    base_url = ""https://www.racingpost.com/results/""
    links = []
    # Generate the links
    while crawl_date <= end_date:
        links.append(base_url + str(crawl_date))
        crawl_date += timedelta(days=1)

如果我打印“链接”,它工作正常,我得到我想要的网址。

然后我有一个蜘蛛,如果我手动输入网址,它也会抓取网站。 现在我尝试传递包含我想要抓取的网址的“链接”变量,如下所示,但我得到了“未定义的变量”。

class RpresultSpider(scrapy.Spider):
    name = 'rpresult'
    allowed_domains = ['www.racingpost.com']
        script = '''
        function main(splash, args)
            url = args.url
            assert(splash:go(url))
            
            return splash:html()
        end
        '''
        def start_requests(self):
            yield SplashRequest(url=links, callback=self.parse, endpoint='execute',
                                args={
                                    'lua_source': self.script
                                })
            
        def parse(self, response):
            for result in response.xpath("//div[@class='rp-resultsWrapper__content']"):
                yield {
                    'result': result.xpath('.//div[@class="rpraceCourse__panel__race__info"]//a[@data-test-selector="link-listCourseNameLink"]/@href').getall()
                } 
                    

如何将生成的链接传递给SplashRequest(url=links

非常感谢您帮助我-我对此仍然很陌生并且迈出了一小步-其中大部分都在倒退...

1 个回复

从我上面的评论中(我不太确定这是否有效,因为我不熟悉scrapy。但是,明显的问题是RpresultSpider类中没有对链接变量的引用。将生成url的循环放在函数内会解决这个问题。

class RpresultSpider(scrapy.Spider):
    name = 'rpresult'
    allowed_domains = ['www.racingpost.com']
        script = '''
        function main(splash, args)
            url = args.url
            assert(splash:go(url))
            
            return splash:html()
        end
        '''
        def start_requests(self):
            start_date = date(2020, 1, 1)
            end_date = date.today()
            crawl_date = start_date
            base_url = ""https://www.racingpost.com/results/""
            links = []
            # Generate the links
            while crawl_date <= end_date:
                links.append(base_url + str(crawl_date))
                crawl_date += timedelta(days=1)
            yield SplashRequest(url=links, callback=self.parse, endpoint='execute',
                                args={
                                    'lua_source': self.script
                                })
            
        def parse(self, response):
            for result in response.xpath("//div[@class='rp-resultsWrapper__content']"):
                yield {
                    'result': result.xpath('.//div[@class="rpraceCourse__panel__race__info"]//a[@data-test-selector="link-listCourseNameLink"]/@href').getall()
                } 
1 如何将URL传递给

我还是php的新手,我制作了一个检查网站语言的脚本,如果是英文设置,则是指向英文页面的按钮链接,另一个是另一页面。 开始: 它应该很简单,我不知道为什么它不起作用。 ...

2 将网址列表传递给Scrapy函数

我有一个API Python,它获取两个参数(URL和一个用户定义的单词),并在JSON文件中提供指定单词在URL中出现多少次。 同时,我想一次花费多个URL,一个列表。 我也想用AsyncIO发出请求。 有什么建议吗? 遵循代码: ...

5 如何将 URL 中的变量传递给 Django 列表视图?

首先,我想声明我已经看到了在此处创建的帖子。 问题是我对 Django 框架还是很陌生,我在代码中实施这个策略的每一次尝试都失败了。 无论如何,我很好奇如何将 URL 中的字符串值传递到我的列表视图中。 就我而言,变量名为 item,因此我可以执行过滤查询。 这在基于函数的视图上非常容易做到,但我正 ...

8 将Selenium打开的URL传递给Scrapy并抓取数据

我一直在尝试从Steam商店抓取Bioshock游戏,并将它们的名称,价格和链接保存在CSV文件中。 我知道如何仅通过使用Scrapy来做到这一点,但是我真的很想知道是否有一种方法可以将Scrapy和Selenium结合起来。 我想使用Selenium只是为了摆脱某些游戏商店网站上弹出的年龄 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM