部分内容为学习过程中从网上搜集保存备份,以防源网站关闭后无法检索。如有涉及版权请留言,看到后处理

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秒。
posted @ 2021-01-12 09:44  Y档案Y  阅读(190)  评论(0编辑  收藏  举报