python - 通过scrapy模拟表单登录

标签 python web-scraping scrapy

我正在尝试模拟登录网站以抓取一些数据。以下是我从浏览器中获取的表单的来源:

*form method="POST"action="/account/login/"id="login_form"class="submit_form" div style='display:none'>/div>input type="hidden"name="next"value="/"*

在 scrapy 中,我按照文档中的建议执行以下操作。

def parse(self, response):
    return [FormRequest.from_response(response, 
                                      formdata={'username': self.uname, 
                                                'password': self.key},  
                                                 callback= self.afterlogin)]


def afterlogin(self, response):
    #check login succeed before going on
    if "authentication failed" in response.body:
         self.log("Login failed", level=log.ERROR)
    else:
        return Request(url="http://example.com",
                           callback=self.parse_Page)

但是,我似乎没有登录,我在日志中没有收到任何错误。我不确定我是否遗漏了表单数据中的某些内容?它确实从日志中显示我正在被重定向:

调试:重定向 (301) 其次是 调试:已抓取 (404)

任何指针将不胜感激。

最佳答案

事实证明,为登录表单添加带有 xpath 的 formxpath 参数解决了这个问题。

关于python - 通过scrapy模拟表单登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024177/

相关文章:

rvest:选择并抓取特定(标题)字符串后的 html 表

python - 网页抓取代码中出现 JSON 错误,如何修复?

python,从页面收集链接/脚本值

python-3.x - Scrapy 1.6 : DNS lookup failed

python - 可以在 Facebook 墙上发布的 Flash 文件中添加链接吗?

python - Jupyter 笔记本中未显示的绘图

python - 使用 Jupyter IPython 和 Cassandra 驱动程序

python - 如何在 Shapely 中检查多边形是否为空?

python-3.x - 根据蜘蛛属性更新scrapy设置

python - Scrapy DEFAULT_REQUEST_HEADERS 不起作用