self.crawl
主要告诉pyspider需要爬取的网址
url
需要爬取的url列表
callback
这个参数用来指定爬取内容后需要哪个方法来处理内容.一般解析为 response. default: _ call __ 如下面调用方法:
例子
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page)
age
任务有效期,以秒为单位,在有效期内爬虫认为该页面没有更改,则在有效期内爬虫会忽略该网址的信息爬取,下面例子每一个回调index_page的任务有效期是10天,在10天之内再遇到这个任务都会被忽略掉(除非有强制抓取参数才不会忽略)
例子
这里表示60秒*60分*24小时*10天,即10天内不会改变
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
....
priority
爬取优先级,数字越大优先级越大,默认为0,可以用这个来先做宽度搜索BFS
例子
#默认为先执行第二句
def index_page(self):
self.crawl('http://www.example.org/page2.html', callback=self.index_page)
self.crawl('http://www.example.org/233.html', callback=self.detail_page,
priority=1)
exetime
爬取任务定时,默认为0,就是即时爬取,下面例子是30分钟后爬取
例子
* 默认为先执行第二句
import time
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
exetime=time.time()+30*60)
retries
失败重新执行次数,默认3次
itag
任务标记值,此标记会在抓取时对比,如果这个值发生改变,不管有效期有没有到都会重新抓取新内容.多数用来动态判断内容是否修改或强制重爬.默认值是:None.
例子
* .update-time字段值改变,则无论有效期多少,重新爬取
* 默认为先执行第二句
import time
def index_page(self, response):
for item in response.doc('.item').items():
self.crawl(item.find('a').attr.url, callback=self.detail_page,
itag=item.find('.update-time').text())
* 也可以在Handler.crawl_config里面设置
class Handler(BaseHandler):
crawl_config = {
'itag': 'v223'
}
auto_recrawl
当设置为True时,任务每过一次有效期(age)都会自动重新爬取,默认值为False
例子
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
age=5*60*60, auto_recrawl=True)
method
HTTP请求,默认为GET
params
URL后面的请求参数,字典
例子
def on_start(self):
self.crawl('http://httpbin.org/get', callback=self.callback,
params={'a': 123, 'b': 'c'})
self.crawl('http://httpbin.org/get?a=123&b=c', callback=self.callback)
data
POST请求参数,字典值会form-encode后再附加
例子
def on_start(self):
self.crawl('http://httpbin.org/post', callback=self.callback,
method='POST', data={'a': 123, 'b': 'c'})
files
headers
自定义请求头,字典类型,可在config里设置
cookies
自定义请求的cookies,字典类型
connect_timeout
指定请求时链接超时时间,单位秒,默认值:20
timeout
请求内容里最大等待秒数.默认值:120
allow_redirects
遇到30x状态码时是否重新请求跟随.默认是:True.
validate_cert
遇到HTTPS类型的URL时是否验证证书,默认值:True.
proxy
设置代理服务器,格式如 username:password@hostname:port .暂时只支持http代理
例子
class Handler(BaseHandler):
crawl_config = {
'proxy': 'localhost:8080'
}
etag
last_modified
fetch_type
设置是否启用JavaScript解析引擎. default: None
例子
def on_start(self):
self.crawl('http://xueqiu.com/today/all', callback=self.index_page, fetch_type='js')
js_script
使用javascript来模拟操作页面
例子
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
fetch_type='js', js_script='''
function() {
window.scrollTo(0,document.body.scrollHeight);
return 123;
}
''')
js_run_at
js_viewport_width/js_viewport_height
load_images
当开启js fetcher时,是否读取图片,默认为False
save
传递一个对象给任务,在任务解析时可以通过response.save来获取传递的值
例子
- 在回调里123将被返回
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,save={'a': 123}) def callback(self, response): return response.save['a']
taskid
force_update
@config(**kwargs)
@config(age=15*60)
def index_page(self, response):
* 第一句运行15分钟,第二句运行10天,受到detail的时间影响
self.crawl('http://www.example.org/list-1.html', callback=self.index_page)
self.crawl('http://www.example.org/product-233', callback=self.detail_page)
@config(age=10*24*60*60)
def detail_page(self, response):
return {...}
Handler.crawl_config = {}
整个project的参数设置,字典类型
class Handler(BaseHandler):
crawl_config = {
'headers': {
'User-Agent': 'GoogleBot',
}
}
...