0

我仍在尝试使用 Scrapy 从需要登录才能访问的微博页面中收集数据。

我现在明白我需要使用 Scrapy FormRequests 来获取登录 cookie。我已经更新了我的 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 从 start_requests 下的 URL 重定向,然后返回如下错误:

ValueError:在 <200 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 >

这是否意味着我需要让蜘蛛在原始页面中查找表单数据以外的内容。我如何告诉它寻找cookie?

根据这篇文章,我还尝试了下面这样的蜘蛛。

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: No element found in <200 https://www.weibo.com/overseas >

非常感谢任何人可以提供的任何帮助,因为这超出了我的知识范围。

4

0 回答 0