刮刮乐登录IMDB

问题描述 投票:0回答:1

我有一个scrapy代码,它可以查找与某个标题相关的列表,然后从每个列表的第一页下载其他标题的评分。它工作得很好。

但是

有没有可能,我可以让这个代码用我的imdb登录,然后从这些列表中下载自己的评分?

下面是代码。

class lisTopSpider(scrapy.Spider):
    name= 'ImdbListsSpider'
    allowed_domains = ['imdb.com']
    titleLinkNum = 'tt0120852'
    start_urls = [
        'https://www.imdb.com/lists/'+titleLinkNum
    ]
    # def ???(self, response):
    #     return scrapy.FormRequest.from_response(
    #         formdata={"username": "[email protected]","password":"example",}
    #         callback=self.parse)

    #lists related to given title
    def parse(self, response):
        listsLinks = response.xpath('//div[2]/strong')
        for link in listsLinks:
            list_url = response.urljoin(link.xpath('.//a/@href').get())
            yield scrapy.Request(list_url, callback=self.parse_list, meta={'list_url': list_url})

        next_page_url = response.xpath('//a[@class="flat-button next-page "]/@href').get()
        if next_page_url is not None:
            next_page_url = response.urljoin(next_page_url)
        yield scrapy.Request(next_page_url, callback=self.parse)            

    #Link of each list
    def parse_list(self, response):
        list_url = response.meta['list_url']
        myRatings = response.xpath('//div[@class="ipl-rating-star small"]/span[2]/text()').getall()

        yield{
            'list': list_url,
            'ratings': myRatings,
        }
python authentication scrapy imdb
1个回答
0
投票

你想要的东西很可能是 def start_requests 它允许你代替Scrapy编写初始的 Request 对象来启动爬行。他们的例子甚至与你的伪代码基本吻合

或者,不使用 FormRequest 提交凭证,您可以分别通过浏览器登录,抓取认证cookie,并通过以下方式提供这些信息 start_requests 以防登录时出现任何奇怪的东西(如重新验证码、双因素认证等)。

def start_requests(self):
    return Request(self.start_urls[0],
                   cookies={'whatever-cookie': 'whatever-value'})

并确保你有 COOKIES_ENABLED 蛛丝马迹 settings.py

© www.soinside.com 2019 - 2024. All rights reserved.