pyspider @every

2023-02-16 16:06 更新

self.crawl

self.crawl(url,** kwargs)

self.crawl 是告訴pyspider應(yīng)該抓取哪個(gè)url的主界面。

參數(shù):

網(wǎng)址

要抓取的網(wǎng)址或網(wǎng)址列表。

打回來

解析響應(yīng)的方法。default:call

```
def on_start(self):
    self.crawl('http://scrapy.org/', callback=self.index_page)
```

以下參數(shù)是可選的

年齡

任務(wù)的有效期。在此期間,該頁面將被視為未修改。默認(rèn)值:-1(從不重新抓?。?/p>

```
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
    ...
```

回調(diào)解析的每個(gè)頁面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)
```

該頁面233.html之前將被抓取page2.html。使用此參數(shù)可以執(zhí)行BFS并減少隊(duì)列中的任務(wù)數(shù)(這可能會(huì)花費(fèi)更多的內(nèi)存資源)。

exetime

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)
```

該頁面將在30分鐘后被抓取。

重試

失敗時(shí)重試次數(shù)。默認(rèn)值:3

ITAG

來自前沿頁面的標(biāo)記,以顯示任務(wù)的潛在修改。它將與其最后一個(gè)值進(jìn)行比較,在更改時(shí)重新抓取。默認(rèn)值:無

```
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。如果它沒有改變,請求將被丟棄。

或者,如果要重新啟動(dòng)所有任務(wù),可以使用itagwith Handler.crawl_config指定腳本版本。

```
class Handler(BaseHandler):
    crawl_config = {
        'itag': 'v223'
    }
```

修改腳本后再更改itag的值,然后再次單擊“運(yùn)行”按鈕。如果沒有設(shè)置之前沒關(guān)系。

auto_recrawl

啟用后,每次都會(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)
```

頁面將每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è)請求是一樣的。

數(shù)據(jù) 身體附加到請求。如果提供了字典,則將進(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'}}分段上傳的文件字典

用戶代理

請求的User-Agent

要發(fā)送的標(biāo)頭字典。

餅干

附加到此請求的Cookie字典。

connect_timeout

初始連接超時(shí)(秒)。默認(rèn)值:20

超時(shí)

獲取頁面的最長時(shí)間(以秒為單位)。默認(rèn)值:120

allow_redirects

按照30x重定向默認(rèn)值:True

validate_cert

對于HTTPS請求,驗(yàn)證服務(wù)器的證書?默認(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è)置代理。

ETAG

如果頁面內(nèi)容未更改,則使用HTTP Etag機(jī)制傳遞進(jìn)程。默認(rèn)值:True

最后修改 如果頁面內(nèi)容未更改,請使用HTTP Last-Modified標(biāo)頭機(jī)制來傳遞進(jìn)程。默認(rèn)值:True

fetch_type

設(shè)置為js啟用JavaScript fetcher。默認(rèn)值:無

js_script

在頁面加載之前或之后運(yùn)行的JavaScript,應(yīng)該被類似的函數(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;
               }
               ''')
```

該腳本將頁面滾動(dòng)到底部。函數(shù)中返回的值可以通過捕獲Response.js_script_result。

js_run_at

運(yùn)行通過js_scriptat document-start或指定的JavaScript document-end。默認(rèn):document-end

js_viewport_width / js_viewport_height

設(shè)置布局過程的JavaScript提取器的視口大小。

load_images

啟用JavaScript fetcher時(shí)加載圖像。默認(rèn)值:False

保存

一個(gè)對象傳遞給回調(diào)方法,可以通過訪問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

任務(wù)id

唯一id用于標(biāo)識(shí)任務(wù),默認(rèn)是URL的MD5檢查碼,可以通過方法覆蓋 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請求。

強(qiáng)制性升級(jí)

即使任務(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。

cURL命令

self.crawl(curl_command)

cURL是一個(gè)用于發(fā)出HTTP請求的命令行工具。它可以很容易地從Chrome Devtools> Network面板中獲得,右鍵單擊請求并“Copy as cURL”。

您可以使用cURL命令作為第一個(gè)參數(shù)self.crawl。它將解析命令并像curl一樣發(fā)出HTTP請求。

@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)。

```
class Handler(BaseHandler):
    crawl_config = {
        'headers': {
            'User-Agent': 'GoogleBot',
        }
    }

    ...
```

crawl_config設(shè)置項(xiàng)目級(jí)別的用戶代理。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)