如何实现类似requests的Session的功能
抓取http://www.blogbar.cc/首页右侧的最新文章,翻页是一个ajax,headers
里带有一个X-CSRFToken
,用requests
的Session
实现了,不知道用pyspider
如何实现
#!/usr/bin/env python
# coding:utf-8
import requests
from pyquery import PyQuery as pq
s = requests.Session()
def get_csrftoken():
content = s.get('http://www.blogbar.cc').content
csrftoken = pq(content)('meta[name="csrf-token"]').attr.content
return csrftoken
def get_lastest_posts(page):
headers = {
'X-CSRFToken': get_csrftoken(),
}
payload = {
'page': page,
}
content = s.post('http://www.blogbar.cc/load_posts', data=payload, headers=headers).content
return content
if __name__ == "__main__":
print get_lastest_posts(2)
类似的用pyspider写了下,失败了
from pyspider.libs.base_handler import *
class Handler(BaseHandler):
crawl_config = {
}
@every(minutes=24 * 60)
def on_start(self):
self.crawl('http://www.blogbar.cc/', callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
csrftoken = response.doc('meta[name="csrf-token"]').attr.content
headers = {'X-CSRFToken':csrftoken,}
url = 'http://www.blogbar.cc/load_posts'
self.crawl(url, method="POST", data={'page':2}, headers=headers, callback=self.detail_page)
@config(priority=2)
def detail_page(self, response):
print response.content
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
CSRF在cookie中还有, response.cookies 读cookie再设置到下一个请求中.
同问“pyspider 如何实现类似requests的Session的功能”