繁体   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)

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

然后我有一个蜘蛛,如果我手动输入 url,它也会抓取网站。 现在我尝试传递包含 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):
            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 个回复

From my comment above (I'm not quite sure if this works because I'm unfamiliar with scrapy. However, the obvious problem is there is no reference to the links variable in the RpresultSpider class. Putting the loop that generates urls inside the function会解决这个问题。

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