老师,为什么我携带cookie进行登录之后代码运行没有返回数据 啊

老师,为什么我携带cookie进行登录之后代码运行没有返回数据 啊

import scrapy


class AppSpider(scrapy.Spider):
    name = "app"
    # allowed_domains = ["www.zhipin.com"]
    # start_urls = ['http://search.dangdang.com/?key=%B2%E9%C0%ED%BE%C5%CA%C0&act=input&page_index=1']

    def new_req(self):
        url = 'http://search.dangdang.com/?key=%B2%E9%C0%ED%BE%C5%CA%C0&act=input&page_index=1'
        cookie = '__permanent_id=20230920231611757816761566318461699; ddscreen=2; __visit_id=20231010130051214325074464524625078; __out_refer=; dest_area=country_id%3D9000%26province_id%3D111%26city_id%3D0%26district_id%3D0%26town_id%3D0; pos_6_start=1696916914135; pos_6_end=1696916914801; pos_9_end=1696918094300; ad_ids=12144306%2C3539000%2C3415467%7C%233%2C3%2C3; sessionID=pc_1ced29b229d6290ad28430e58c401e729cf89c5c7d9683da833f94e844e48c0e; USERNUM=KYktRh56D4dUdZlNxID1Kg==; login.dangdang.com=.ASPXAUTH=1kUydnmmYRdqIlrVed3mVv18ivPovzVc3NyaGVO/DOohvFfXaj9XVg==; dangdang.com=email=ZDA3NjU1NWFlOTE4NWRlN0BkZG1vYmlsZV91c2VyLmNvbQ==&nickname=&display_id=2358298867535&customerid=l8UnhPkhztLqXMfVrAcE7A==&viptype=c/5GHQl/FjE=&show_name=133****7052; ddoy=email=d076555ae9185de7@ddmobile_user.com&nickname=&validatedflag=0&uname=13337577052&utype=0&.ALFG=off&.ALTM=1696919792557; LOGIN_TIME=1696919792858; __rpm=%7Cs_112100...1696919801787; __trace_id=20231010143643407244866958314587608'
        cookie = {item.split("=")[0]: item.split("=")[1] for item in cookie.split('; ')}
        yield scrapy.Request(url=url, callback=self.parse, cookies=cookie)

    def warn_on_generator_with_return_value_stub(spider, callable):
        pass

    scrapy.utils.misc.warn_on_generator_with_return_value = warn_on_generator_with_return_value_stub
    scrapy.core.scraper.warn_on_generator_with_return_value = warn_on_generator_with_return_value_stub




    def parse(self, response):

        print('------------------------------')

        link = response.xpath('.//ul[@class="bigimg"]/li')
        for i in link:
            urls = i.xpath('.//a/@href').get()
            urls = 'http:' + urls
            yield scrapy.Request(url=urls, callback=self.parse_init)

    def parse_init(self, response):
        title = response.xpath('/html/body/div[2]/div[3]/div[2]/div/div[1]/div[1]/h1/text()').get()
        price = response.xpath("/html/body/div[2]/div[3]/div[2]/div/div[1]/div[6]/div[2]/div[1]/div[1]/p[2]/text()").get()
        author = response.xpath('/html/body/div[2]/div[3]/div[2]/div/div[1]/div[2]/span[1]/a/text()').get()
        press = response.xpath('/html/body/div[2]/div[3]/div[2]/div/div[1]/div[2]/span[2]/a/text()').get()
        store_name = response.xpath('/html/body/div[2]/div[3]/div[2]/div/div[2]/div[2]/p[1]/span/span[2]/span/a/text()').get()
        print(title)

    def parse_na(self, response):
        num = 2
        while num <= 100:
            url = f'http://search.dangdang.com/?key=%B2%E9%C0%ED%BE%C5%CA%C0&act=input&page_index={num}'
            num = num + 1
            yield scrapy.Request(url=url, callback=self.parse)




















        #
        # with open('./cl.txt', 'w', encoding='utf-8') as f:
        #     f.write(htmls)

https://img1.sycdn.imooc.com//climg/6524f233092c651012470069.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2023-10-10 21:51:45

同学,你好!同学写代码要写一个方法运行一下。写的较多一运行错误也很多,最好是写一个方法运行一下看是否报错,方便调程序。scrapy 第一个执行的方法是start_requests()方法。同学可以在该方法中设置cookie 发送请求。同学自己定义的new_req()方法scrapy 不会执行,所以没有返回数据。修改代码如下:

https://img1.sycdn.imooc.com//climg/652554e909ea773a18660670.jpg

祝学习愉快~

  • 提问者 吴老师在线叛逃 #1

    嗯嗯,我一直都是写一个方法就会运行一下。就是这些代码运行好几遍之后需要登录才能获取信息。所以才自定义发送请求。就是不知道方法名必须是start_requests。还以为随便写一个都可以。谢谢老师解答

    2023-10-10 23:27:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师