zoukankan      html  css  js  c++  java
  • 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秒。
  • 相关阅读:
    Nginx练习练习玩玩
    MySQL Lock--MySQL加锁规则
    MySQL Transaction--RR事务隔离级别下加锁测试
    MySQL Transaction--RC事务隔离级别下加锁测试
    MySQL Transaction--事务隔离级别基础
    MySQL Transaction--快照读和当前读
    MySQL Transaction--RC和RR区别
    MySQL Disk--NAND Flash原理
    MySQL Disk--SSD与RAID
    MySQL Disk--SSD磁盘性能抖动问题
  • 原文地址:https://www.cnblogs.com/roboot/p/14265462.html
Copyright © 2011-2022 走看看