Python学习----pyspider(linux)(二)

Python学习----pyspider(linux)(一):https://blog.csdn.net/weixin_40132006/article/details/108636549

命令行

pyspider完整的命令行结构如下:

pyspider [OPTIONS] COMMAND [ARGS]

OPTIONS可选参数

-c可以指定配置文件的名称,下面为一个常用的配置

{
 "taskdb": "mysql+taskdb://username:password@host:port/taskdb",
 "projectdb": "mysql+projectdb://username:password@host:port/projectdb",
 "resultdb": "mysql+resultdb://username:password@host:port/resultdb",
 "message_queue": "amqp://username:password@host:port/%2F",
 "webui": {
  "username": "some_name",
  "password": "some_password",
  "need-auth": true,
  "port": xxxx
 }
}

最后保存文件为pyspider.json(名字都可以),运行

pyspider -c pyspider.json all

pyspider也单独运行某一个组件,如下

Scheduler 运行单独组件

pyspider scheduler [OPTIONS]

OPTIONS参数如下:

Fetcher 运行单独组件

pyspider fetcher [OPTIONS]

OPTIONS参数如下:

Processor 运行单独组件

pyspider processor [OPTIONS]

OPTIONS参数如下:

Options:
 --processor-cls TEXT       Processor使用的类
 --help                     显示帮助信息 

WebUI 运行单独组件

pyspider webui [OPTIONS]

OPTIONS参数如下:

如果想要改变WebUI的端口为5001,单独运行

pyspider webui --port 5001

当然也可以在配置文件中修改(前面提到过),然后运行

pyspider -c pyspider.json webui

crawl()方法

详细介绍一下craw()方法的参数配置:官网:http://docs.pyspider.org/en/latest/apis/self.crawlurl

url爬取的URL,可以是字符串也可是URL列表
callback回调函数,指定解析响应内容的方法
age任务的有效时间,只有在有效时间内并且只能执行一次
priority爬取任务的优先级,值越大优先级越高,默认值为0
exetime设置定时任务
retries定义重复次数,默认值是3
itag设置标记,如果标记相同会不执行
auto_recrawl开启时,爬取任务过期后会重新执行,循环时间即定义的age时间长度
methodHTTP请求方式,默认是GET
params定义GET请求参数 param={'a' = 123, 'b' = 'c'}
dataPOST表单数据如:data={'a' = 123, 'b' = 'c'}
user_agent爬取使用的User-Agent
headers爬取使用的Headers
cookies爬取使用的Cookies,为字典格式
connect_timeout初始化连接时的最长等待时间,默认是20秒
timeout抓取网页时的最长等待时间,默认是120秒
allow_redirects是否自动处理重定向,默认是true
validate_cert是否验证证书,此选项对HTTPS请求有效,默认是true
proxy爬取时使用的代理,格式为username:password@hostname:port
fetch_type开启PhantomJS渲染  fetch_type='js'
js_script

页面加载完后执行的JavaScript脚本,

js_script="'

function() {

    window.scrollTo(0,document.body.scrollHeight);

    return 123;

}

'"

js_run_atJavaScript脚本运行的位置,是页面节点开头还是结尾,默认是结尾,即document-end

js_viewport_width

js_viewport_heigth

JavaScript渲染页面时的窗口大小
load_images加载JavaScript页面时确认是否加载图片,它默认是否
save

可以传递参数

crawl方法中  save={'page': 1}

回调函数中   response.save['page']

cancel取消任务,如果一个任务是ACTIVE状态,需将force_update设置为True
force_update即使任务处于ACTIVE状态,也会强制更新状态

任务分区

pyspider判断两个任务是否重复,是对该任务对应的URL的MD5值作为任务的唯一ID,如果ID相同,其中一个就不会爬取。

# 这里重写了get_taskid()方法,利用URL和POST的参数来生成ID。这样同一URL不同POST参数,ID不同会被认为两个不同任务
import json
from pyspider.libs.utils import md5string
def get_taskid(self, task):
    return md5string(task['url']+json.dumps(task['fetch'].get('data', '')))

全局配置

可以使用crawl_config来指定全局配置,配置中的参数会和crawl()方法创建任务时的参数合并。

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

定时爬取

通过every属性来设置爬取的时间间隔

#注意有效时间一定要小于重复时间更短
@every(minutes = 24 * 60)
def on_start(self):
    self.crawl('http://www.example.org', callback = self.index_page)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
pyspider错误"subprocess-exited-with-error"表示在运行pyspider时,遇到一个或多个子进程出现错误,导致整个命令无法完成。这种错误通常与操作系统或Python版本相关。为了解决这个问题,你可以采取以下几个步骤: 1. 确认你的电脑上是否安装了所需的依赖库。你可以使用pip install命令来安装所需的库。确保你已经安装了pyspider的所有依赖库,并且它们的版本是兼容的。 2. 确保你的操作系统是最新的,并且已经安装了最新版本的Python。有些依赖库只能在特定版本的Python上运行。你可以通过运行python --version命令来查看你当前的Python版本。如果你的Python版本过旧,你可能需要更新到最新的版本。 3. 如果以上步骤都无法解决问题,你可以尝试重新安装Python。你可以使用python -m ensurepip命令来重新安装Python。这将确保你有最新的pip和setuptools库。 如果你使用的是Windows操作系统,还可以尝试下载并安装与你的Python版本对应的pycurl库。你可以在https://www.lfd.uci.edu/~gohlke/pythonlibs/#pycurl网站上找到Python版本对应的pycurl文件。下载后,你可以使用pip install命令来安装pycurl库。 总结起来,要解决pyspider错误"subprocess-exited-with-error",你可以尝试安装所需的依赖库、更新Python版本、重新安装Python或下载并安装适用于你的Python版本的pycurl库。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值