小编B.M*_*.W.的帖子

Scrapy Crawl Spider 只刮取一定数量的层数

您好,我想使用 Scrapy CrawlSpider 类(此处的文档)抓取网络的所有页面。

class MySpider(CrawlSpider):
    name = 'abc.com'
    allowed_domains = ['abc.com']
    start_urls = ['http://www.abc.com']

    rules = (
        Rule(SgmlLinkExtractor(allow=('item\.php', )), callback='parse_item')
    )

    def parse_item(self, response):
        self.log('Hi, this is an item page! %s' % response.url)
        ...
Run Code Online (Sandbox Code Playgroud)

(1) 因此,这个蜘蛛将从 start_urls 中定义的页面 www.abc.com 开始,它会自动进行解析...然后跟踪 www.abc.com 中的每个链接,该链接位于规则对吗?我想知道有没有办法让我只能刮一定数量的层..比如说只刮第一层(直接来自 www.abc.com 的链接)?

(2) 由于我在 allowed_deomains 中定义了只有 abc.com url 会被抓取。所以我不需要在规则中重新定义它?并做这样的事情:

Rule(SgmlLinkExtractor(allow=('item\.php', )), allow_domains="www.abc.com", callback='parse_item')
Run Code Online (Sandbox Code Playgroud)

(3)如果我使用crawlspider,如果我不在spider类中定义规则会发生什么?它会抓取所有页面吗?或者它甚至不会遵循任何一条,因为规则尚未得到“满足”?

python scrapy

4
推荐指数
1
解决办法
2867
查看次数

在Redhat 6.3上安装R 3+

我想在我的Red Hat集群上安装R,其版本如下:

$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.3 (Santiago)
Run Code Online (Sandbox Code Playgroud)

当我去R的主页时,这就是他们的存储库:

在此输入图像描述

我想知道那里只有redhat版本4和5,我不知道哪个版本最适合我的操作系统.

Texinfo问题就在这里

因为我今天已经提出了6个以上的问题.Stackoverflow不喜欢我提出更多问题.所以我会在这个问题上提出以下问题,抱歉.

嗨,我试图使用Expect自动登录到远程服务器并安装R.当我安装R时,他们提出了各种提示,询问'包将采用xx MB你可以吗?'

要安装的命令:

su -c 'yum install R R-core R-core-devel R-devel'
Run Code Online (Sandbox Code Playgroud)

您需要输入Yes几次才能完成安装.

我的问题是:

  1. 是否有yum安装标志,您可以告诉机器安装我想要安装的所有内容.不要问我.所以我可以安装这四个软件包,没有任何提示.

  2. 如果在"安静模式"下难以安装,如何在Expect中编写while循环,以便自动发送Y:

    Pseudo Code Not Working!
    send -- "sudo su -c yum install ...."
    while ("Expect '*Is it OK [Y/N]*'"){
    send 'Y\r'
    # if (expect 'user$')
    {break}
    }
    
    Run Code Online (Sandbox Code Playgroud)

非常感谢提前.

redhat r expect

4
推荐指数
1
解决办法
5243
查看次数

sed切换第一个和最后一个单词的顺序

我试图使用sed切换句子中第一个和最后一个单词的顺序,因为我不认为我理解在这种情况下"贪婪"的正则表达式是多少.我只是因为三个字的句子而悲惨地失败了.

$ echo hello world mike | sed 's/\([a-z]*\).* \([a-z]*\).*/\2 \1/'
mike hello
Run Code Online (Sandbox Code Playgroud)

为什么输出不是"世界你好迈克"?一些可能有用的额外信息.

  1. \ 1\2是第一个和第二个正则表达式匹配

  2. 我在这里按照教程.

我的最终目标是切换句子中第一个和最后一个单词的顺序,而不管其中有多少单词.

regex sed

4
推荐指数
1
解决办法
8121
查看次数

与Linux Split相反

我有一个巨大的文件,我将大文件分成几个小块,分而治之.现在我有一个包含以下文件列表的文件夹:

output_aa #(the output file done: cat input_aa | python parse.py > output_aa)
output_ab
output_ac
output_ad
...
Run Code Online (Sandbox Code Playgroud)

我想知道有没有办法将这些文件合并在一起按照索引顺序:

我知道我可以通过使用来做到这一点

cat * > output.all 
Run Code Online (Sandbox Code Playgroud)

但我更好奇另一个神奇的命令已经存在与分裂..

shell split

3
推荐指数
1
解决办法
6041
查看次数

MySQL用户定义的函数

我有一个表包含几列说:column_1,column_2和column_3.

我在表格中添加了一个名为score的新列.我想要做的是根据这三列计算得分并轻松调整参数.

说我的分数公式如下所示:

score = a * column_1 + b * column_2 + c * column_3
Run Code Online (Sandbox Code Playgroud)

是否有可能创建一个udf或进程(以前从未使用过)来轻松做到这一点?

所以我有一个像getScore(a,b,c)这样的函数,我可以这样做:

select 
    column_1,
    column_2, 
    column_3, 
    getScore(0.5, 0.1, 0.4) as score
from table
Run Code Online (Sandbox Code Playgroud)

要么

update table set score = getScore(0.5, 0.1, 0.4)
Run Code Online (Sandbox Code Playgroud)

谢谢!

mysql user-defined-functions

3
推荐指数
1
解决办法
2万
查看次数

以最方便的方式SSH,无需每次都输入ssh命令

我经常需要登录远程服务器并进行各种工作.我正在使用我的Mac,每次我必须输入一个长命令才能这样做.

ssh -i ~/key.pem ubuntu@255.255.255.255
Run Code Online (Sandbox Code Playgroud)

我想知道在没有每天输入命令的情况下登录远程服务器最简单的方法是什么.

也欢迎方便的苹果应用程序

更新:

1>感谢Matt Bryant的回答.我通过修改〜/ .ssh/config(默认情况下不存在)成功避免输入整个用户名和主机地址

Host <ShortName>
    User <UserName>
    HostName <HostIP>
    IdentityFile <KeyPath>
Run Code Online (Sandbox Code Playgroud)

然后我可以输入此命令以避免键入主机的全名和密钥的完整路径:

ssh <ShortName> 
Run Code Online (Sandbox Code Playgroud)

2>如果没有pem键,任何人都知道如何存储pem键或避免输入密码?

macos ssh

3
推荐指数
1
解决办法
501
查看次数

Hadoop Streaming Python Trivial示例不起作用

我有一个看起来像这样的输入文件,它已经上传到HDFS/tmp/input(在^ A中分隔,这是一个非打印字符,这是VI中的视图)

A^A10
A^A7
A^A10
A^A5
A^A10
A^A8
B^A1
A^A9
B^A1
A^A9
B^A1
A^A9
B^A1    
A^A9
B^A1
A^A9
B^A1
A^A9
Run Code Online (Sandbox Code Playgroud)

我写的mapper看起来像这样:

import sys
for line in sys.stdin:
    name, score = line.strip().split(chr(1))
    print '\t'.join([name, str(int(score)+1)])
Run Code Online (Sandbox Code Playgroud)

reducer看起来像这样(类似):

import sys
from datetime import datetime

def calc(inputList):
    return min(inputList)

def main():
    current_key = None
    value_list = []
    key = None
    value = None
    result = None
    for line in sys.stdin:
        try:
            line = line.strip()
            key, value = line.split('\t', 1)

            try:
                value = …
Run Code Online (Sandbox Code Playgroud)

python hadoop hdfs hadoop-streaming

3
推荐指数
1
解决办法
4368
查看次数

Fedora OpenJDK设置JAVA_HOME

我正在使用Fedora(实际上是Pidora,因为我试图在raspberrypi集群上设置hadoop).我使用ansible在所有节点上安装了oopenjdk.但是,当我尝试设置JAVA_HOME环境变量时,我真的很困惑,看看以下文件夹/usr/lib/jvm:

[root@datafireball1 jvm]# ls
java-1.7.0-openjdk-1.7.0.60-2.4.7.0.fc20.arm  jre  jre-1.7.0  jre-1.7.0-openjdk  jre-1.7.0-openjdk-1.7.0.60-2.4.7.0.fc20.arm  jre-openjdk
[root@datafireball1 jvm]# ls -alth
total 80K
drwxr-xr-x   3 root root 4.0K Jun  7 21:07 .
lrwxrwxrwx   1 root root   35 Jun  7 21:07 jre-1.7.0-openjdk -> /etc/alternatives/jre_1.7.0_openjdk
lrwxrwxrwx   1 root root   27 Jun  7 21:07 jre-1.7.0 -> /etc/alternatives/jre_1.7.0
lrwxrwxrwx   1 root root   29 Jun  7 21:07 jre-openjdk -> /etc/alternatives/jre_openjdk
lrwxrwxrwx   1 root root   21 Jun  7 21:07 jre -> /etc/alternatives/jre
lrwxrwxrwx   1 root root   48 Jun  7 21:07 jre-1.7.0-openjdk-1.7.0.60-2.4.7.0.fc20.arm …
Run Code Online (Sandbox Code Playgroud)

java linux openjdk fedora environment-variables

3
推荐指数
1
解决办法
7915
查看次数

Tableau计算日期差异

我正在处理一些销售数据,每个交易都有多个阶段.说A,B,C,D阶段......

在完美的世界中,每个交易都需要进入每个阶段,我想计算交易在每个阶段的差异.

假设数据可能如下所示:

transaction_id    stage    updated_date
1                 A        2015-01-01
1                 B        2015-01-02
1                 C        2015-01-05
1                 D        2015-01-06
Run Code Online (Sandbox Code Playgroud)

我想要的东西:

transaction_id    stage    time_spent
1                 AB       1 day
1                 BC       3 days
1                 CD       1 day 
Run Code Online (Sandbox Code Playgroud)

然后,我将能够分析在每个阶段花费的时间,并查看直方图或分布.但是,我唯一能找到的是dateiff函数.

谁能告诉我如何在Tableau中实现这一目标?

tableau-api

3
推荐指数
1
解决办法
1547
查看次数

Python MySQLdb 从另一个数据库中选择并插入到另一个数据库中

我有一张看起来像这样的表:

part    min    max    unitPrice
A       1      9      10
A       10     99     5
B       1      9      11
B       10     99     6
...
Run Code Online (Sandbox Code Playgroud)

我还有一个生产表,我需要将以前的数据插入到这个生产表中。当我从一个表中执行 select 语句并获取记录时,我很难插入到另一个表中。

cursor_table1.execute('select part, min, max, unitPrice, now() from table1')
for row in cursor_table1.fetchall():
    part, min, max, unitPrice, now = row
    print part, min, max, unitPrice, now
Run Code Online (Sandbox Code Playgroud)

结果是

'416570S39677N1043', 1L, 24L, 48.5, datetime.datetime(2018, 10, 8, 16, 33, 42)
Run Code Online (Sandbox Code Playgroud)

我知道 Python 巧妙地找出了每一列的类型,但实际上我只想要原始内容。所以我可以做这样的事情:

cursor_table1.execute('select part, min, max, unitPrice, now() from table1')
for row in cursor_table1.fetchall():
    cursor_table2.execute('insert into table2 …
Run Code Online (Sandbox Code Playgroud)

python mysql sql

2
推荐指数
1
解决办法
1万
查看次数