Unable to fetch some links using list comprehension within scrapyGenerator Expressions vs. List ComprehensionList comprehension vs mapCreate a dictionary with list comprehension in Pythonlist comprehension vs. lambda + filterif/else in Python's list comprehension?if else in a list comprehensionScrapy - parse a page to extract items - then follow and store item url contentsScrapy: Get data on page and following linkHow to keep track of a request in scrapyPython Scrapy and yielding

What is the meaning of "of trouble" in the following sentence?

Why doesn't a const reference extend the life of a temporary object passed via a function?

How to make payment on the internet without leaving a money trail?

Why do we use polarized capacitors?

Shall I use personal or official e-mail account when registering to external websites for work purpose?

Does the average primeness of natural numbers tend to zero?

Is Social Media Science Fiction?

Could Giant Ground Sloths have been a good pack animal for the ancient Mayans?

Denied boarding due to overcrowding, Sparpreis ticket. What are my rights?

What is the command to reset a PC without deleting any files

Is it wise to focus on putting odd beats on left when playing double bass drums?

Does bootstrapped regression allow for inference?

What to wear for invited talk in Canada

Eliminate empty elements from a list with a specific pattern

How can I fix this gap between bookcases I made?

Was there ever an axiom rendered a theorem?

What are the advantages and disadvantages of running one shots compared to campaigns?

I see my dog run

Is ipsum/ipsa/ipse a third person pronoun, or can it serve other functions?

Pristine Bit Checking

Crop image to path created in TikZ?

What does "enim et" mean?

Email Account under attack (really) - anything I can do?

How did the USSR manage to innovate in an environment characterized by government censorship and high bureaucracy?



Unable to fetch some links using list comprehension within scrapy


Generator Expressions vs. List ComprehensionList comprehension vs mapCreate a dictionary with list comprehension in Pythonlist comprehension vs. lambda + filterif/else in Python's list comprehension?if else in a list comprehensionScrapy - parse a page to extract items - then follow and store item url contentsScrapy: Get data on page and following linkHow to keep track of a request in scrapyPython Scrapy and yielding






.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








0















I've written a script in python using scrapy to get the links from response after making a post request to a certain url. The links are perfectly coming through when I try with the following script.



Working one:



import scrapy
from scrapy.crawler import CrawlerProcess

class AftnetSpider(scrapy.Spider):
name = "aftnet"
base_url = "http://www.aftnet.be/MyAFT/Clubs/SearchClubs"

def start_requests(self):
yield scrapy.FormRequest(self.base_url,callback=self.parse,formdata='regions':'1,3,4,6')

def parse(self,response):
for items in response.css("dl.club-item"):
for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall():
yield "result_url":response.urljoin(item)

if __name__ == "__main__":
c = CrawlerProcess(
'USER_AGENT': 'Mozilla/5.0',

)
c.crawl(AftnetSpider)
c.start()


However, my intention is to achieve the same using list comprehension but I'm getting some error.



Using list comprehension:



def parse(self,response):
return [response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


I get the following error:



2019-03-08 12:45:44 [scrapy.core.scraper] ERROR: Spider must return Request, BaseItem, dict or None, got 'str' in <POST http://www.aftnet.be/MyAFT/Clubs/SearchClubs>



How can I get some links using list comprehension within scrapy?











share|improve this question




























    0















    I've written a script in python using scrapy to get the links from response after making a post request to a certain url. The links are perfectly coming through when I try with the following script.



    Working one:



    import scrapy
    from scrapy.crawler import CrawlerProcess

    class AftnetSpider(scrapy.Spider):
    name = "aftnet"
    base_url = "http://www.aftnet.be/MyAFT/Clubs/SearchClubs"

    def start_requests(self):
    yield scrapy.FormRequest(self.base_url,callback=self.parse,formdata='regions':'1,3,4,6')

    def parse(self,response):
    for items in response.css("dl.club-item"):
    for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall():
    yield "result_url":response.urljoin(item)

    if __name__ == "__main__":
    c = CrawlerProcess(
    'USER_AGENT': 'Mozilla/5.0',

    )
    c.crawl(AftnetSpider)
    c.start()


    However, my intention is to achieve the same using list comprehension but I'm getting some error.



    Using list comprehension:



    def parse(self,response):
    return [response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


    I get the following error:



    2019-03-08 12:45:44 [scrapy.core.scraper] ERROR: Spider must return Request, BaseItem, dict or None, got 'str' in <POST http://www.aftnet.be/MyAFT/Clubs/SearchClubs>



    How can I get some links using list comprehension within scrapy?











    share|improve this question
























      0












      0








      0








      I've written a script in python using scrapy to get the links from response after making a post request to a certain url. The links are perfectly coming through when I try with the following script.



      Working one:



      import scrapy
      from scrapy.crawler import CrawlerProcess

      class AftnetSpider(scrapy.Spider):
      name = "aftnet"
      base_url = "http://www.aftnet.be/MyAFT/Clubs/SearchClubs"

      def start_requests(self):
      yield scrapy.FormRequest(self.base_url,callback=self.parse,formdata='regions':'1,3,4,6')

      def parse(self,response):
      for items in response.css("dl.club-item"):
      for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall():
      yield "result_url":response.urljoin(item)

      if __name__ == "__main__":
      c = CrawlerProcess(
      'USER_AGENT': 'Mozilla/5.0',

      )
      c.crawl(AftnetSpider)
      c.start()


      However, my intention is to achieve the same using list comprehension but I'm getting some error.



      Using list comprehension:



      def parse(self,response):
      return [response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


      I get the following error:



      2019-03-08 12:45:44 [scrapy.core.scraper] ERROR: Spider must return Request, BaseItem, dict or None, got 'str' in <POST http://www.aftnet.be/MyAFT/Clubs/SearchClubs>



      How can I get some links using list comprehension within scrapy?











      share|improve this question














      I've written a script in python using scrapy to get the links from response after making a post request to a certain url. The links are perfectly coming through when I try with the following script.



      Working one:



      import scrapy
      from scrapy.crawler import CrawlerProcess

      class AftnetSpider(scrapy.Spider):
      name = "aftnet"
      base_url = "http://www.aftnet.be/MyAFT/Clubs/SearchClubs"

      def start_requests(self):
      yield scrapy.FormRequest(self.base_url,callback=self.parse,formdata='regions':'1,3,4,6')

      def parse(self,response):
      for items in response.css("dl.club-item"):
      for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall():
      yield "result_url":response.urljoin(item)

      if __name__ == "__main__":
      c = CrawlerProcess(
      'USER_AGENT': 'Mozilla/5.0',

      )
      c.crawl(AftnetSpider)
      c.start()


      However, my intention is to achieve the same using list comprehension but I'm getting some error.



      Using list comprehension:



      def parse(self,response):
      return [response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


      I get the following error:



      2019-03-08 12:45:44 [scrapy.core.scraper] ERROR: Spider must return Request, BaseItem, dict or None, got 'str' in <POST http://www.aftnet.be/MyAFT/Clubs/SearchClubs>



      How can I get some links using list comprehension within scrapy?








      python python-3.x web-scraping scrapy






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Mar 8 at 7:03









      MITHUMITHU

      223217




      223217






















          1 Answer
          1






          active

          oldest

          votes


















          1














          Your generator with a loop is returning a single dict on every call:



          yield "result_url":response.urljoin(item)


          But your list comprehension is returning a list of strings. I don't know why you want a list comprehension here: your generator is much easier to understand (as shown by the fact that you have got it to work and are having trouble with the list comprehension) but if you insist on doing it, what you need is a list of dicts not strings, something like



          return ["result_url":response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


          But please don't do that. Remember that readability counts. Your generator is readable, your one-liner isn't.






          share|improve this answer























            Your Answer






            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "1"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader:
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            ,
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55058289%2funable-to-fetch-some-links-using-list-comprehension-within-scrapy%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            1














            Your generator with a loop is returning a single dict on every call:



            yield "result_url":response.urljoin(item)


            But your list comprehension is returning a list of strings. I don't know why you want a list comprehension here: your generator is much easier to understand (as shown by the fact that you have got it to work and are having trouble with the list comprehension) but if you insist on doing it, what you need is a list of dicts not strings, something like



            return ["result_url":response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


            But please don't do that. Remember that readability counts. Your generator is readable, your one-liner isn't.






            share|improve this answer



























              1














              Your generator with a loop is returning a single dict on every call:



              yield "result_url":response.urljoin(item)


              But your list comprehension is returning a list of strings. I don't know why you want a list comprehension here: your generator is much easier to understand (as shown by the fact that you have got it to work and are having trouble with the list comprehension) but if you insist on doing it, what you need is a list of dicts not strings, something like



              return ["result_url":response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


              But please don't do that. Remember that readability counts. Your generator is readable, your one-liner isn't.






              share|improve this answer

























                1












                1








                1







                Your generator with a loop is returning a single dict on every call:



                yield "result_url":response.urljoin(item)


                But your list comprehension is returning a list of strings. I don't know why you want a list comprehension here: your generator is much easier to understand (as shown by the fact that you have got it to work and are having trouble with the list comprehension) but if you insist on doing it, what you need is a list of dicts not strings, something like



                return ["result_url":response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


                But please don't do that. Remember that readability counts. Your generator is readable, your one-liner isn't.






                share|improve this answer













                Your generator with a loop is returning a single dict on every call:



                yield "result_url":response.urljoin(item)


                But your list comprehension is returning a list of strings. I don't know why you want a list comprehension here: your generator is much easier to understand (as shown by the fact that you have got it to work and are having trouble with the list comprehension) but if you insist on doing it, what you need is a list of dicts not strings, something like



                return ["result_url":response.urljoin(item) for items in response.css("dl.club-item") for item in items.css("dd a[data-toggle='popover']::attr('data-url')").getall()]


                But please don't do that. Remember that readability counts. Your generator is readable, your one-liner isn't.







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Mar 8 at 8:31









                BoarGulesBoarGules

                8,78721228




                8,78721228





























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid


                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.

                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55058289%2funable-to-fetch-some-links-using-list-comprehension-within-scrapy%23new-answer', 'question_page');

                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    AWS Lex not identifying response if by a variable The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experienceEnforcing custom enumeration in AWS LEX for slot valuesHow to give response based on user response in Amazon Lex?Intercepting AWS Lambda Response to a AWS Lex QueryLex chat bot error: Reached second execution of fulfillment lambda on the same utteranceamazon lex showing invalid responseLambda response send back to Lex slot?Response card in Amazon lexAmazon Lex - Lambda response return HTML to botHow can I solve 424 (Failed Dependency) (python) obtained from Amazon lex?

                    Алба-Юлія

                    Захаров Федір Захарович