Scrapy для входа, а затем получить данные из Weibo - PullRequest
0 голосов
/ 19 марта 2020

Я все еще пытаюсь использовать Scrapy для сбора данных со страниц на Weibo , для доступа к которым необходимо войти в систему.

Теперь я понимаю, что мне нужно использовать Scrapy FormRequests, чтобы получить логин повара ie. Я обновил свой Spider, чтобы попытаться заставить его сделать это, но он все еще не работает.

Кто-нибудь может сказать мне, что я делаю неправильно?

import scrapy

class LoginSpider(scrapy.Spider):
    name = 'WB'

    def start_requests(self):
        return [
            scrapy.Request("https://www.weibo.com/u/2247704362/home?wvr=5&lf=reg", callback=self.parse_item)
        ]

    def parse_item(self, response):
        return scrapy.FormRequest.from_response(response, formdata={'user': 'user', 'pass': 'pass'}, callback=self.parse)

    def parse(self, response):
        print(response.body)

Когда я запускаю этого паука. Scrapy перенаправляет с URL-адреса в start_requests, а затем возвращает следующую ошибку:

ValueError: Элемент не найден в <200 <a href="https://passport.weibo.com/visitor/visitor?entry=miniblog&a=enter&url=https%3A%2F%2Fweibo.com%2Fu%2F2247704362%2Fhome%3Fwvr%3D5%26lf%3Dreg&domain=.weibo.com&ua=php-sso_sdk_client-0.6.28&_rand=1585243156.3952" rel="nofollow noreferrer">https://passport.weibo.com/visitor/visitor?entry=miniblog&a=enter&url=https%3A%2F%2Fweibo.com%2Fu%2F2247704362%2Fhome%3Fwvr%3D5%26lf%3Dreg&domain=.weibo.com&ua=php-sso_sdk_client-0.6.28&_rand=1585243156.3952>

Означает ли это, что мне нужно, чтобы паук искал что-то кроме данных формы на исходной странице. Как мне сказать, чтобы искать повара ie?

Я также попробовал паука, подобного этому, на основании этого поста .

import scrapy

class LoginSpider(scrapy.Spider):
    name = 'WB'

    login_url = "https://www.weibo.com/overseas"
    test_url = 'https://www.weibo.com/u/2247704362/'

    def start_requests(self):
        yield scrapy.Request(url=self.login_url, callback=self.parse_login)

    def parse_login(self, response):
        return scrapy.FormRequest.from_response(response, formid="W_login_form", formdata={"loginname": "XXXXX", "password": "XXXXX"}, callback=self.start_crawl)

    def start_crawl(self, response):
        yield Request(self.test_url, callback=self.parse_item)

    def parse_item(self, response):
        print("Test URL " + response.url)

Но все равно не работает, выдавая ошибку:

ValueError: Элемент не найден в <200 <a href="https://www.weibo.com/overseas" rel="nofollow noreferrer">https://www.weibo.com/overseas>

Буду очень признателен за любую помощь, которую может предложить кто-либо, так как это выходит за рамки моих знаний.

...