pyspider 介绍
self.crawl
self.crawl(url, **kwargs)
self.crawl是告诉pyspider应该抓取哪个url的主界面。
Parameters:
url
要抓取的网址或网址列表。
callback
解析响应的方法。default:_ call _ _
def on_start(self):
self.crawl('http://scrapy.org/', callback=self.index_page)
以下参数是可选的
age
任务的有效期。在此期间,该页面将被视为未修改。默认值:-1(从不重新抓取)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
...
由回调index_page解析的每个页面都将被视为在10天内未更改。
如果您在上次抓取后的10天内提交任务,则会将其丢弃。
priority
任务安排的优先级越高越好。默认值: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之前被抓取。使用此参数可以执行BFS并减少队列中的任务数(这可能会花费更多的内存资源)。
exetime
unix时间戳中任务的执行时间。默认值:0(立即)
import time
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
exetime=time.time()+30*60)
该页面将在30分钟后被抓取。
retries
失败时重试次数。默认值:3
itag
来自前沿页面的标记,以显示任务的潜在修改。它将与其最后一个值进行比较,在更改时重新抓取。默认值:无
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。如果没有改变,请求将被丢弃。
- 或者,如果要重新启动所有任务,可以使用带有Handler.crawl_config的itag来指定脚本版本。
class Handler(BaseHandler):
crawl_config = {
'itag': 'v223'
}
修改脚本后再更改itag的值,然后再次单击“运行”按钮。如果没有设置之前没关系。
auto_recrawl
启用后,任务将在每个年龄段重新抓取。默认值:False
def on_start(self):
self.crawl('http://www.example.org/', callback=self.callback,
age=5*60*60, auto_recrawl=True)
该页面将每5小时重新启动一次。
method
要使用的HTTP方法。默认值:GET
params
要附加到URL的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
身体附加到请求。如果提供了字典,则将进行表单编码。
def on_start(self):
self.crawl('http://httpbin.org/post', callback=self.callback,
method='POST', data={'a': 123, 'b': 'c'})
files
{field:{filename:'content'}}文件字典到分段上传
user_agent
请求的User-Agent
headers
要发送的标头字典。
cookies
要附加到此请求的Cookie字典。
connect_timeout
初始连接超时(秒)。默认值:20
timeout
获取页面的最长时间(以秒为单位)。默认值:120
allow_redirects
按照30x重定向默认值:True
validate_cert
对于HTTPS请求,验证服务器的证书?默认值:True
proxy
用户名的代理服务器:password @ hostname:要使用的端口,目前仅支持http代理。
class Handler(BaseHandler):
crawl_config = {
'proxy': 'localhost:8080'
}
Handler.crawl_config可以与代理一起使用来为整个项目设置代理。
etag
如果页面内容未更改,则使用HTTP Etag机制传递进程。默认值:True
last_modified
如果页面内容未更改,请使用HTTP Last-Modified标头机制来传递进程。默认值:True
fetch_type
设置为js以启用JavaScript fetcher。默认值:无
js_script
在页面加载之前或之后运行的JavaScript应该被函数包装,如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;
}
''')
该脚本将页面滚动到底部。函数中返回的值可以通过Response.js_script_result捕获。
js_run_at
运行在document-start或document-end通过js_script指定的JavaScript。默认值:document-end
js_viewport_width/js_viewport_height
设置布局过程的JavaScript提取器的视口大小。
load_images
启用JavaScript fetcher时加载图像。默认值:False
save
一个对象传递给回调方法,可以通过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将在回调中返回
taskid
用于标识任务的唯一id,默认是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', '')))
Only url is md5 -ed as taskid by default, the code above add data of POST request as part of taskid.
force_update
即使任务处于ACTIVE状态,也强制更新任务参数。
cancel
取消任务,应与force_update一起使用以取消活动任务。要取消auto_recrawl任务,您还应设置auto_recrawl = False。
cURL command
self.crawl(curl_command)
cURL是用于发出HTTP请求的命令行工具。它可以很容易地从Chrome Devtools> Network面板中获得,右键单击请求并“Copy as cURL”。
您可以使用cURL命令作为self.crawl的第一个参数。它将解析命令并像curl一样发出HTTP请求。
@config(**kwargs)
使用trim方法作为回调时self.crawl的默认参数。例如:
@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 {...}
list-1.html的年龄为15分钟,而product-233.html的年龄为10天。因为product-233.html的回调是detail_page,意味着它是detail_page所以它共享detail_page的配置。
Handler.crawl_config = {}
整个项目的self.crawl的默认参数。调度程序的crawl_config中的参数(priority,retries,exetime,age,itag,force_update,auto_recrawl,cancel)将在创建任务时加入,fetcher和processor的参数将在执行时连接。您可以使用此机制更改之后的获取配置(例如cookie)。
class Handler(BaseHandler):
crawl_config = {
'headers': {
'User-Agent': 'GoogleBot',
}
}
- crawl_config set a project level user-agent.
About Projects
项目是独立的,但您可以从项目导入other_project导入另一个项目作为模块.
一个项目有5个状态:TODO,STOP,CHECKING,DEBUG和RUNNING
- TODO - 创建一个脚本来编写
- STOP - 如果要将项目设置为STOP(= =),可以将项目标记为STOP。
- 检查 - 修改正在运行的项目时,为防止不完整的修改,项目状态将自动设置为CHECKING。
- 调试/运行 - 这两种状态与蜘蛛没有区别。但是当它第一次运行时将它标记为DEBUG是好的,
- 然后在检查后将其更改为RUNNING。.
rate - 一秒钟内有多少请求爆发
- 考虑到这种情况,速率/爆发= 0.1 / 3,这意味着蜘蛛每10秒抓一页。所有任务都完成,项目每分钟检查最后更新的项目。假设发现了3个新项目,pyspider将“爆发”并抓取3个任务而不等待3 * 10秒。但是,第四项任务需要等待10秒。