使用带有 FORMDATA 的 scrapy 问题使用凭据抓取网站

Scraping website with credentials using scrapy issue with FORMDATA


希望大家平安无事,
我目前正在接受 scrapy 培训,并决定尝试抓取一个需要登录的网站 (Glassdoor)。
我被困住了,想知道是否有人可以检查我到目前为止所做的事情并帮助我?

1)我加载了 glassdoor 登录页面并打开了检查工具(在 Chrome 中),
2) 选择网络部分并在页面中输入我的登录名,登录后我查找具有 302 状态 (POST) 的 login_input.htm 文件,一旦选择我进入 HEADER 部分但我找不到 FORMDATA 部分。所以我没有所有的信息可以添加到我的代码中。

我尝试了很多在线资源,但找不到解决方法?

我还放置了我开始使用的代码:

    import scrapy
    from scrapy.http import FormRequest
    from scrapy.utils.response import open_in_browser


    class GdSpider(scrapy.Spider):
        name = 'gd'
        allowed_domains = ['https://www.glassdoor.co.uk/profile/login_input.htm']
        start_urls = ('http://https://www.glassdoor.co.uk/profile/login_input.htm/',)

        def parse(self, response):
            return FormRequest.from_response(response,
                                     formdata={'password': 'mypassword',
                                               'username': 'myusername'},
                                     callback=self.scrape_pages)

        def scrape_pages(self, response):
            open_in_browser(response)

谁能告诉我我做错了什么?

谢谢,

阿尔诺

Glasdoor 的登录是一个 JavaScript 呈现的弹出窗口,如果您禁用 JS,当您尝试单击登录 link 或打开您拥有的 link 时,您将看不到任何呈现给出。

这似乎是您要查找的内容: https://www.glassdoor.com/profile/ajax/loginAjax.htm 当您打开登录弹出窗口并尝试使用任何凭据登录时(可能是错误的,无关紧要),您将在网络选项卡中看到 loginAjax.htm 弹出窗口。这个有一个表单,可以通过 POST 将凭据发送到我在上面发布的 link。

不幸的是,它也会发送带有凭据的令牌,因此使用它登录可能会很困难。

要发送数据,您可以使用 from scrapy.http.request.form import _urlencode 中的 _urlencode,如下所示:

inputs = [("key", "value"),]
body = _urlencode(inputs, response.encoding)

并通过 POST 将 body 发送到上面的 URL (输入必须是元组列表)构建一个正常的 Scrapy 请求。