【问题标题】:Scrapy can't find form on pageScrapy在页面上找不到表格
【发布时间】:2018-06-29 23:37:08
【问题描述】:

我正在尝试编写一个会自动登录到this website 的蜘蛛。但是,当我尝试在 shell 中使用 scrapy.FormRequest.from_response 时,出现错误:

No <form> element found in <200 https://www.athletic.net/account/login/?ReturnUrl=%2Fdefault.aspx>

当我检查网站上的元素时,我绝对可以看到该表单,但是当我尝试使用 response.xpath() 查找它时,它也没有出现在 Scrapy 中。表单内容是否有可能以某种方式对我的蜘蛛隐藏?如果是这样,我该如何解决?

【问题讨论】:

    标签: html python-3.x xpath scrapy web-crawler


    【解决方案1】:

    表单是使用 Javascript 创建的,它不是静态 HTML 源代码的一部分。 Scrapy 不解析 Javascript,因此无法找到。

    静态 HTML 的相关部分(他们使用 Javascript 注入表单的地方)是:

    <div ng-controller="AppCtrl as appC" class="m-auto pt-3 pb-5 container" style="max-width: 425px;">
        <section ui-view></section>
    </div>
    

    要找到这样的问题,我会:

    • 比较“查看源代码”和“检查”中的源代码
    • 用不带 Javascript 的浏览器浏览网页(当我开发爬虫时,我通常有一个带 Javascript 的浏览器用于研究和文档,另一个用于检查没有 Javascript 的网页)

    在这种情况下,您必须为此网页手动创建 FormRequest。我无法在他们的表单上发现任何形式的 CSRF 保护,所以它可能很简单:

    FormRequest(url='https://www.athletic.net/account/auth.ashx',
                formdata={"e": "foo@example.com", "pw": "secret"})
    

    但是,我认为您不能使用formdata,而是他们希望您发送 JSON。不确定FormRequest 是否可以处理这个问题,我猜你只是想使用标准的Request

    由于他们在前端大量使用 Javascript,因此您也无法使用页面的源代码来查找这些参数。相反,我使用浏览器的开发者控制台并检查了当我尝试使用无效凭据登录时发生的请求/响应。

    这给了我:

    General:
    Request URL: https://www.athletic.net/account/auth.ashx
    [...]
    
    Request Payload:
    {e: "foo@example.com", pw: "secret"}
    

    【讨论】:

      【解决方案2】:

      Scrapy 有一个 JsonRequest 类来帮助发布 JSON。请参阅此处 [https://docs.scrapy.org/en/latest/topics/request-response.html]

      所以像下面这样的东西应该可以工作

      data = {"password": "pword", "username": "user"}
      
      # JSON POST to API login URL
      return JsonRequest( 
              url=url,
              callback=self.after_login,
              data=data,
          )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-07
        • 1970-01-01
        相关资源
        最近更新 更多