self.crawl 是告訴pyspider應(yīng)該抓取哪個(gè)url的主界面。
要抓取的網(wǎng)址或網(wǎng)址列表。
解析響應(yīng)的方法。_default:__call___
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page)
以下參數(shù)是可選的
任務(wù)的有效期。在此期間,該頁(yè)面將被視為未修改。默認(rèn)值:-1(從不重新抓取)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
...
回調(diào)解析的每個(gè)頁(yè)面index_page都將被視為在10天內(nèi)未被更改。如果您在上次抓取后的10天內(nèi)提交任務(wù),則會(huì)將其丟棄。
優(yōu)先 任務(wù)安排的優(yōu)先級(jí)越高越好。默認(rèn)值:0
```
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)
```
該頁(yè)面233.html之前將被抓取page2.html。使用此參數(shù)可以執(zhí)行BFS并減少隊(duì)列中的任務(wù)數(shù)(這可能會(huì)花費(fèi)更多的內(nèi)存資源)。
unix時(shí)間戳中任務(wù)的執(zhí)行時(shí)間。默認(rèn)值:0(立即)
```
import time
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
exetime=time.time()+30*60)
```
該頁(yè)面將在30分鐘后被抓取。
失敗時(shí)重試次數(shù)。默認(rèn)值:3
來(lái)自前沿頁(yè)面的標(biāo)記,以顯示任務(wù)的潛在修改。它將與其最后一個(gè)值進(jìn)行比較,在更改時(shí)重新抓取。默認(rèn)值:無(wú)
```
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())
```
在樣本中,.update-time用作itag。如果它沒(méi)有改變,請(qǐng)求將被丟棄。
或者,如果要重新啟動(dòng)所有任務(wù),可以使用itagwith Handler.crawl_config指定腳本版本。
class Handler(BaseHandler):
crawl_config = {
'itag': 'v223'
}
修改腳本后再更改itag的值,然后再次單擊“運(yùn)行”按鈕。如果沒(méi)有設(shè)置之前沒(méi)關(guān)系。
啟用后,每次都會(huì)重新繪制任務(wù)age。默認(rèn)值:False
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
age=5*60*60, auto_recrawl=True)
頁(yè)面將每age5小時(shí)重新啟動(dòng)一次。
要使用的HTTP方法。默認(rèn)值:GET
PARAMS 要附加到URL的URL參數(shù)字典。
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)
這兩個(gè)請(qǐng)求是一樣的。
身體附加到請(qǐng)求。如果提供了字典,則將進(jìn)行表單編碼。
def on_start(self):
self.crawl('http://httpbin.org/post', callback=self.callback,
method='POST', data={'a': 123, 'b': 'c'})
{field: {filename: 'content'}}分段上傳的文件字典
請(qǐng)求的User-Agent
要發(fā)送的標(biāo)頭字典。
附加到此請(qǐng)求的Cookie字典。
初始連接超時(shí)(秒)。默認(rèn)值:20
獲取頁(yè)面的最長(zhǎng)時(shí)間(以秒為單位)。默認(rèn)值:120
按照30x重定向默認(rèn)值:True
對(duì)于HTTPS請(qǐng)求,驗(yàn)證服務(wù)器的證書(shū)?默認(rèn)值:True
username:password@hostname:port要使用的代理服務(wù)器,目前僅支持http代理。
class Handler(BaseHandler):
crawl_config = {
'proxy': 'localhost:8080'
}
Handler.crawl_config可用于proxy為整個(gè)項(xiàng)目設(shè)置代理。
如果頁(yè)面內(nèi)容未更改,則使用HTTP Etag機(jī)制傳遞進(jìn)程。默認(rèn)值:True
如果頁(yè)面內(nèi)容未更改,請(qǐng)使用HTTP Last-Modified標(biāo)頭機(jī)制來(lái)傳遞進(jìn)程。默認(rèn)值:True
設(shè)置為js啟用JavaScript fetcher。默認(rèn)值:無(wú)
在頁(yè)面加載之前或之后運(yùn)行的JavaScript,應(yīng)該被類(lèi)似的函數(shù)包裝function() { document.write("binux"); }。
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;
}
''')
該腳本將頁(yè)面滾動(dòng)到底部。函數(shù)中返回的值可以通過(guò)捕獲Response.js_script_result。
運(yùn)行通過(guò)js_scriptat document-start或指定的JavaScript document-end。默認(rèn):document-end
設(shè)置布局過(guò)程的JavaScript提取器的視口大小。
啟用JavaScript fetcher時(shí)加載圖像。默認(rèn)值:False
一個(gè)對(duì)象傳遞給回調(diào)方法,可以通過(guò)訪問(wèn)response.save。
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
save={'a': 123})
def callback(self, response):
return response.save['a']
123 將被退回 callback
唯一id用于標(biāo)識(shí)任務(wù),默認(rèn)是URL的MD5檢查碼,可以通過(guò)方法覆蓋 def get_taskid(self, task)
import json
from pyspider.libs.utils import md5string
def get_taskid(self, task):
return md5string(task['url']+json.dumps(task['fetch'].get('data', '')))
默認(rèn)情況下,只有url是md5 -ed作為taskid,上面的代碼作為taskid的data一部分添加了POST請(qǐng)求。
即使任務(wù)處于ACTIVE狀態(tài),也強(qiáng)制更新任務(wù)參數(shù)。
取消任務(wù),應(yīng)該用于force_update取消活動(dòng)任務(wù)。要取消auto_recrawl任務(wù),您也應(yīng)該設(shè)置auto_recrawl=False。
self.crawl(curl_command)
cURL是一個(gè)用于發(fā)出HTTP請(qǐng)求的命令行工具。它可以很容易地從Chrome Devtools> Network面板中獲得,右鍵單擊請(qǐng)求并“Copy as cURL”。
您可以使用cURL命令作為第一個(gè)參數(shù)self.crawl。它將解析命令并像curl一樣發(fā)出HTTP請(qǐng)求。
@config(** kwargs)
self.crawl使用裝飾方法作為回調(diào)時(shí)的默認(rèn)參數(shù)。例如:
@config(age=15*60)
def index_page(self, response):
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 {...}
age的list-1.html是15分鐘,而age的product-233.html是10天。因?yàn)榛卣{(diào)product-233.html是detail_page,意味著它是一個(gè)detail_page共享配置detail_page。
Handler.crawl_config = {} self.crawl整個(gè)項(xiàng)目的默認(rèn)參數(shù)。crawl_config調(diào)度程序中的參數(shù)(priority,retries,exetime,age,itag,force_update,auto_recrawl,cancel)將在創(chuàng)建任務(wù)時(shí)加入,fetcher和processor的參數(shù)將在執(zhí)行時(shí)連接。之后您可以使用此機(jī)制更改獲取配置(例如cookie)。
crawl_config = {
'headers': {
'User-Agent': 'GoogleBot',
}
}
...
crawl_config設(shè)置項(xiàng)目級(jí)別的用戶代理。
更多建議: