scrapy войти в imdb - PullRequest
       121

scrapy войти в imdb

0 голосов
/ 04 мая 2020

У меня есть код 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": "example@gmail.com","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,
        }

1 Ответ

0 голосов
/ 06 мая 2020

Скорее всего, вам понадобится def start_requests, который позволяет вам вместо Scrapy создать исходный объект Request, запускающий сканирование. Их пример даже более или менее соответствует вашему псевдокоду

. В качестве альтернативы, вместо использования FormRequest для отправки учетных данных, вы можете отдельно войти в систему через браузер, получить файлы cookie аутентификации и предоставить их через start_requests в на случай, если вокруг входа в систему есть какие-то странные вещи (например, reCaptcha, двухфакторная аутентификация и т. д. c):

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

и убедитесь, что у вас есть COOKIES_ENABLED в * 1015 вашего паука *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...