经常在爬有些网站的时候需要登录,大多数网站需要你提供一个用户名和密码,在这种情况下,需要先向网站发送一个POST请求。可以使用Scrapy的FormRequest
类,这个类和Request
类很相似,只是多了一个extra参数,用这个参数可以传递表单数据。要使用这个类,先导入:
from scrapy.http import FormRequest
然后把start_urls
替换成start_requests()
方法,因为在这种情况下需要的不仅仅是一些URL(start_requests()
方法的默认行为是从start_urls
取出URL发出请求)。
在start_requests()
方法中创建并返回一个FormRequest
:
# Start with a login request
def start_requests(self):
return [
FormRequest(
"http://web:9312/dynamic/login",
formdata={
"user": "user", "pass": "pass"}
)]
Scrapy帮助我们处理了Cookies,只要登录之后,它就会在以后的请求中传递给服务器,就像浏览器做的一样。运行一下scrapy crawl
:
$ scrapy crawl login
INFO: Scrapy 1.0.3 started (bot