文档章节

pyspider爬虫学习-API-self.crawl.md

sijinge
 sijinge
发布于 2017/09/07 22:19
字数 2155
阅读 105
收藏 0
self.crawl
===========

self.crawl(url, **kwargs)
-------------------------
'self.crawl'是告诉pyspider哪些页面需要爬取的主要接口
`self.crawl` is the main interface to tell pyspider which url(s) should be crawled.
#参数
### Parameters:
#url
##### url
the url or url list to be crawled.#这个url或者url列表将被爬取
#回调函数
##### callback
#解析响应的方法 _default: `__call__`
the method to parse the response. _default: `__call__` _

```python
def on_start(self):
    self.crawl('http://scrapy.org/', callback=self.index_page)
```
#以下参数是可选的
the following parameters are optional
#年龄
##### age
#任务的有效期限,在此期间,该页将被视为没有修改。_default:-1(不重新抓取)_
the period of validity of the task. The page would be regarded as not modified during the period. _default: -1(never recrawl)_ 

```python
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
    ...
```
#回调'index_page'解析的每个页面在10天内都不会改变。如果你在10天内提交任务,那么它将被丢弃。
> Every pages parsed by the callback `index_page` would be regarded not changed within 10 days. If you submit the task within 10 days since last crawled it would be discarded.
#优先级
##### priority
#任务要根据优先级调度,越高越好。 _default:0 _
the priority of task to be scheduled, higher the better. _default: 0_ 

```python
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'之前被爬取,使用此参数可以做(BFS)(http://en.wikipedia.org/wiki/Breadth-first_search)和减少任务队列的数量(可能花费更多内存资源)
> The page `233.html` would be crawled before `page2.html`. Use this parameter can do a [BFS](http://en.wikipedia.org/wiki/Breadth-first_search) and reduce the number of tasks in queue(which may cost more memory resources).
#执行时间
##### exetime
#在unix时间戳中执行任务的时间。_default:0(立即)_
the executed time of task in unix timestamp. _default: 0(immediately)_ 

```python
import time
def on_start(self):
    self.crawl('http://www.example.org/', callback=self.callback,
               exetime=time.time()+30*60)
```
#这个页面将在30分钟后被抓取
> The page would be crawled 30 minutes later.
#重试
##### retries
#失败而重试的次数。 _default: 3_
retry times while failed. _default: 3_ 

#itag
##### itag
#一个来自前端页面的标记,以显示该任务的潜在修改。它将与它的最后一个值进行比较,当它改变时,recrawl。_default:None_
a marker from frontier page to reveal the potential modification of the task. It will be compared to its last value, recrawl when it's changed. _default: None_ 

```python
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。如果没有更改,请求将被丢弃。
> In the sample, `.update-time` is used as itag. If it's not changed, the request would be discarded.

或者你可以在'Handler.crawl_config'中指定'itag'脚本版本,如果您想要重新启动所有的任务。
Or you can use `itag` with `Handler.crawl_config` to specify the script version if you want to restart all of the tasks.

```python
class Handler(BaseHandler):
    crawl_config = {
        'itag': 'v223'
    }
```
#修改脚本并再次单击run按钮后,更改itag的值。如果没有设置,就无所谓了
> Change the value of itag after you modified the script and click run button again. It doesn't matter if not set before. 
#动态重新抓取
##### auto_recrawl
#当启用时,任务将在每一个'age'的时间内重新启动。_default:False_
when enabled, task would be recrawled every `age` time. _default: False_ 

```python
def on_start(self):
    self.crawl('http://www.example.org/', callback=self.callback,
               age=5*60*60, auto_recrawl=True)
```
#该页面将在每隔5小时重新启动。
> The page would be restarted every `age` 5 hours.

##### method
#使用HTTP方法。_default:GET_
HTTP method to use. _default: GET_ 

##### params
#URL参数的字典,附加到URL后面
dictionary of URL parameters to append to the URL. 

```python
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)
```
> The two requests are the same. #这两种请求方式效果相同

##### data
#附在请求上的主体。如果提供了字典,就会发生表单编码。
the body to attach to the request. If a dictionary is provided, form-encoding will take place. 

```python
def on_start(self):
    self.crawl('http://httpbin.org/post', callback=self.callback,
               method='POST', data={'a': 123, 'b': 'c'})
```

##### files
#字典格式'{字段: {文件名: '内容'}}'多文件上传
dictionary of `{field: {filename: 'content'}}` files to multipart upload.` 

##### user_agent
#请求的用户代理
the User-Agent of the request

##### headers
#要发送的头文件字典。
dictionary of headers to send. 

##### cookies
将cookies字典附在请求上
dictionary of cookies to attach to this request. 

##### connect_timeout
#首次连接超时秒。_default:20_
timeout for initial connection in seconds. _default: 20_

##### timeout
#获取页面的最大时间秒数。_default:120_
maximum time in seconds to fetch the page. _default: 120_ 

##### allow_redirects
#遵循'30x'重定向._default:True_
follow `30x` redirect _default: True_ 

##### validate_cert
#对于HTTPS请求,验证服务器的证书?_default:True_
For HTTPS requests, validate the server’s certificate? _default: True_ 

##### proxy
#使用'用户名:密码@主机名:端口'格式代理服务器,目前只支持http代理。
proxy server of `username:password@hostname:port` to use, only http proxy is supported currently. 

```python
class Handler(BaseHandler):
    crawl_config = {
        'proxy': 'localhost:8080'
    }
```
  #'Handler.crawl_config'可以用'proxy'来为整个项目设置代理
> `Handler.crawl_config` can be used with `proxy` to set a proxy for whole project.

##### etag 
#如果页面的内容没有改变,使用HTTP Etag机制传递进程。_default:True_
use HTTP Etag mechanism to pass the process if the content of the page is not changed. _default: True_ 

###### last_modified
#如果页面的内容没有改变,使用HTTP last-modified头机制传递进程。_default:True_
use HTTP Last-Modified header mechanism to pass the process if the content of the page is not changed. _default: True_ 

##### fetch_type
#设置为'js'以启用JavaScript fetcher。_default:None_
set to `js` to enable JavaScript fetcher. _default: None_ 

##### js_script
#在加载页面之前或之后运行的JavaScript,应该包装成一个函数就像'function() { document.write("binux"); }'
JavaScript run before or after page loaded, should been wrapped by a function like `function() { document.write("binux"); }`. 


```python
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;
               }
               ''')
```
  #脚本会将页面滚动到底部。函数返回的值可以通过'Response.js_script_result'捕获。
> The script would scroll the page to bottom. The value returned in function could be captured via `Response.js_script_result`.

##### js_run_at
#在'document-start'或'document-end'中运行由'js_script'指定的JavaScript。_default:document-end _
run JavaScript specified via `js_script` at `document-start` or `document-end`. _default: `document-end`_ 

##### js_viewport_width/js_viewport_height
#为布局过程的JavaScript fetcher设置viewport的大小。
set the size of the viewport for the JavaScript fetcher of the layout process. 

##### load_images
#当JavaScript fetcher启用时加载图像。_default:False_
load images when JavaScript fetcher enabled. _default: False_ 

##### save
#一个对象传递给回调方法,可以通过“response.save”来访问
a object pass to the callback method, can be visit via `response.save`. 


```python
def on_start(self):
    self.crawl('http://www.example.org/', callback=self.callback,
               save={'a': 123})

def callback(self, response):
    return response.save['a']
```
   'callback'将返回'123'
> `123` would be returned in `callback`

##### taskid
#识别任务的惟一id,默认是URL生成的MD5代码,可以被方法'def get_taskid(self,task)'覆盖
unique id to identify the task, default is the MD5 check code of the URL, can be overridden by method `def get_taskid(self, task)` 

```python
import json
from pyspider.libs.utils import md5string
def get_taskid(self, task):
    return md5string(task['url']+json.dumps(task['fetch'].get('data', '')))
```
  #在默认情况下,只有url是md5 -ed,上面的代码添加了POST请求的'data'作为taskid的一部分。
> Only url is md5 -ed as taskid by default, the code above add `data` of POST request as part of taskid.

##### force_update
#即使任务处于'ACTIVE'状态,也可以强制更新任务。
force update task params even if the task is in `ACTIVE` status. 

##### cancel
#取消任务,应该用'force_update'来取消一个活动任务。要取消'auto_recrawl'任务,您应该设置'auto_recrawl = False'。
cancel a task, should be used with `force_update` to cancel a active task. To cancel an `auto_recrawl` task, you should set `auto_recrawl=False` as well.

cURL command
------------

`self.crawl(curl_command)`
#cURL是一个用于创建HTTP请求的命令行工具。它可以很容易地获得Chrome Devtools 到网络面板,右击请求并“复制为cURL”。
cURL is a command line tool to make a HTTP request. It can easily get form Chrome Devtools > Network panel,  right click the request and "Copy as cURL".
#您可以使用cURL命令作为'self.crawl'的第一个参数。它将解析该命令,并使HTTP请求类似curl。
You can use cURL command as the first argument of `self.crawl`. It will parse the command and make the HTTP request just like curl do.

@config(**kwargs)
-----------------
#'self.crawl'的默认参数,当使用装饰方法作为回调时。例如:
default parameters of `self.crawl` when use the decorated method as callback. For example:

```python
@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 {...}
```
#'list1.html'的'age'是15分钟,而'product-233.html'的'age'是10天。因为'product-233.html'的回调是'detail_page',这意味着它是一个'detail_page',所以它共享'detail_page'的配置。
`age` of `list-1.html` is 15min while the `age` of `product-233.html` is 10days. Because the callback of `product-233.html` is `detail_page`, means it's a `detail_page` so it shares the config of `detail_page`.

Handler.crawl_config = {}
-------------------------
#整个项目'self.crawl'的默认参数。调度器的'crawl_config'中的参数(priority, retries, exetime, age, itag, force_update, auto_recrawl, cancel)将在任务创建时加入,fetcher和processor的参数将在执行时加入。您可以使用此机制来更改之后的fetch配置(例如cookie)。
default parameters of `self.crawl` for the whole project. The parameters in `crawl_config` for scheduler (priority, retries, exetime, age, itag, force_update, auto_recrawl, cancel) will be joined when the task created, the parameters for fetcher and processor will be joined when executed. You can use this mechanism to change the fetch config (e.g. cookies) afterwards.

```python
class Handler(BaseHandler):
    crawl_config = {
        'headers': {
            'User-Agent': 'GoogleBot',
        }
    }
    
    ...
```
  #crawl_config设置一个项目级别的用户代理
> crawl_config set a project level user-agent.

© 著作权归作者所有

共有 人打赏支持
sijinge
粉丝 0
博文 41
码字总数 37230
作品 0
广州
架构师
私信 提问
使用pyspider抓取起点中文网小说数据

简介 pyspider是国人开发的相当好用的爬虫框架。虽然网上教程不是很多,但是文档详细,操作简单,非常适合用来做爬虫练习或者实现一些抓取数据的需求。 本文就以抓取起点中文小说网的小说作品...

某杰
2017/02/22
0
0
手把手教你写网络爬虫(3):开源爬虫框架对比

原文出处:拓海 介绍 大家好!我们从今天开始学习开源爬虫框架Scrapy,如果你看过《手把手》系列的前两篇,那么今天的内容就非常容易理解了。细心的读者也许会有疑问,为什么不学出身名门的A...

拓海
2018/04/28
0
0
OS X安装pyspider遇到问题

新手一个,学完python,想玩儿爬虫,可安装pyspider的时候报错不知道怎么回事,于是来请教大牛,截图如下:(另外我是从命令行输入 pip install pyspider 来安装的)...

AaronYun
2015/08/07
697
1
pyspider + RabbitMQ 使用记 - 上

接到一个爬虫任务,项目比较巨大,原来想用 Requests 配合正则做爬虫。后来得知了 pyspider 这个神器,才知道之前的想法 low 爆了。pyspider GitHub 按照 GitHub 上的安装教程安装好以后,我...

xh4n3
2015/08/04
0
0
用PySpider搜集2017年高校招生章程

个人认为PySpider是一个十分容易上手而且功能强大的Python爬虫框架。支持多线程爬取、JS动态解析、出错重试、定时爬取等等的功能。最重要的是,它通过web提供了可操作界面,使用非常人性化。...

临江仙卜算子
2018/05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql grant 用户权限总结

用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库、哪些表 2. 可以限制用户对哪些表执行SELECT、CREATE、DELETE、DELETE、ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用...

Airship
26分钟前
1
0
RabbitMQ学习(3)

1. 消费端 1. 消费端通过推模式或者拉模式从RabbitMQ中获取并消费消息,当消费者确认处理消息后,可以手动确认消息已被接收,然后就会将该消息从RabbitMQ的队列中标记再清除,消费者端还可以...

江左煤郎
36分钟前
1
0
linux mysql(5.7)开启慢查询

一、有3个配置需要设置, 1:相关开关 2:日志目录文件 3:慢查询的时间限制 二、设置完之后重启mysql service mariadb restart 三、重启后做个测试 连接mysql 并查询: select sleep(6); 四...

chro008
44分钟前
1
0
选择IDC机房、选择硬件、上架服务器、装系统

选择IDC机房 当业务量比较大的时候,往往选用IDC而不是公有云来跑业务。 IDC机房的服务一般分为两种 需要我们自己购买服务器和网络设备,托管到IDC机房。IDC机房会提供布线、巡检、硬件操作等...

李超小牛子
46分钟前
2
0
《傲慢与偏见》的读书笔记与读后感作文2400字

《傲慢与偏见》的读书笔记与读后感作文2400字: 作者:孙苑馨;笔者按:读书这个习惯是我爸妈养出来的。小时候父母赚的钱除了吃饭穿衣剩下的就是买书了,他们除了买各种新鲜出版的文艺派图书...

原创小博客
54分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部