【问题标题】:Persist Session Cookie in Scrapy在 Scrapy 中持久化会话 Cookie
【发布时间】:2016-05-27 22:27:45
【问题描述】:

我正在抓取一个网站,其中包含我需要点击的接受条款表单。当我单击按钮时,我被重定向到需要抓取的资源。我有基本的机制工作,即最初的点击工作,我得到一个会话,一切顺利,直到会话超时。然后由于某种原因,Scrapy 确实被重定向了,但响应 URL 没有得到更新,所以我得到了重复的项目,因为我使用 URL 来检查重复。

例如我请求的网址是:

https://some-internal-web-page/Records/Details/119ce2b7-35b4-4c63-8bd2-2bfbf77299a8

但是当会话到期时,我得到:

https://some-internal-web-page/?returnUrl=%2FRecords%2FDetails%2F119ce2b7-35b4-4c63-8bd2-2bfbf77299a8

这是我的代码:

 # function to get through accept dialog
def parse(self, response):
    yield FormRequest.from_response(response, formdata={"value":"Accept"}, callback=self.after_accept)

# function to parse markup
def after_accept(self, response):

    global latest_inspection_date

    urls = ['http://some-internal-web-page/Records?SearchText=&SortMode=MostRecentlyHired&page=%s&PageSize=25' % page for page in xrange(1,500)]

    for u in urls:
        yield Request( u, callback=self.parse_list )

所以我的问题是,我如何保留和/或刷新会话 cookie,这样我就不会得到重定向 URL 而不是我需要的 URL。

【问题讨论】:

    标签: python cookies web-scraping scrapy scrapy-spider


    【解决方案1】:

    Cookies 默认启用并通过每个回调传递,请确保在settings.py 中使用COOKIES_ENABLED=True 启用它。

    您也可以使用COOKIES_DEBUG=True(默认为False)为其启用调试日志,并检查cookie是否正确传递,因此您的问题可能与其他问题有关。

    【讨论】:

    • 谢谢!我启用了它,但你的建议让我在别处寻找。问题似乎是在对页面的请求中,我被定向到接受表单,但随后找到了会话并被重定向。但是, response.url 似乎没有更新,因为当它到达回调时,它仍然具有重定向 url。我知道我在正确的页面上,因为数据被刮掉了。为什么请求不更新响应网址?这就是我正在做的所有事情:yield Request(url=details_url, callback=self.parse_details)
    • response.url 没有更新是什么意思?每个响应都在其各自的回调中受到控制,因此如果您生成 Request,则相应的 Response 对象将被您在 Request. 上指定的 callback 方法捕获
    • Scrapy 有详细页面的 URL 列表(例如 some-internal-web-page/Records/Details/119ce2b7...),但是当它开始实际请求它时(假设会话过时),返回接受表单,会话是检查然后发出请求。但是我在 parse_details 中得到的 response.url 是重定向 URL(例如 some-internal-web-page/…),而不是详细信息页面的 URL。所以在我看来,Requests 传递给 parse_details 的 URL 在 301 之后没有更新。
    • 在我看来,您应该再次对实际页面执行以下请求(在 parse_details 中)(请记住将 dont_filter=True 放入请求中,以免它被过滤为重复)。还请检查response.status是否是重定向状态,可能您已停用RedirectMiddleware
    猜你喜欢
    • 2013-04-28
    • 2016-04-24
    • 2013-03-06
    • 2016-08-10
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2015-09-14
    • 2012-03-29
    相关资源
    最近更新 更多