linkBG

linkBG 查看完整档案

北京编辑中国劳动关系学院  |  计算机应用技术 编辑北京知道创宇信息技术有限公司  |  实习生 编辑填写个人主网站
编辑
_ | |__ _ _ __ _ | '_ \| | | |/ _` | | |_) | |_| | (_| | |_.__/ \__,_|\__, | |___/ 个人简介什么都没有

个人动态

linkBG 关注了标签 · 2020-09-15

智能合约

区块链上,可以执行的代码,以太坊第一个支持智能合约

关注 89

linkBG 提出了问题 · 2018-11-22

实时流数据收集的问题

问题描述

需要实现一个分布式系统,把日志和数据收集值数据服务器上。在不使用Kafka之类的消息框架,有没有好的解决方式呢?

关注 2 回答 1

linkBG 提出了问题 · 2018-11-08

解决C语言malloc释放

问题描述

在C语言项目中的某个函数里使用malloc来申请空间。最后函数返回保存在这个空间的值,也就是在函数中并没有free申请的空间,那么在函数外需要free吗?

相关代码

char *test() {
    char *op = malloc(sizeof(char) * 16);
    ...
    return op;
 }
 
 int main() {
     printf("%s", test());
 }

关注 2 回答 1

linkBG 提出了问题 · 2017-11-22

gitlab设置只允许域名访问ip拒绝访问

在内网搭了个gitlab,目前域名和ip都可以访问,使用了:

server_name _; 
return 500; 

之后就连域名也无法访问。请问该怎么设置?谢谢

关注 1 回答 0

linkBG 提出了问题 · 2017-11-08

Scrapy循环爬取

想要对一个页面进行监控,这个页面是有分页,目前实现了所有分页的抓取,那么想要回到第一个分页来监控,请问怎么写。

        if len(response.css('li.next.disabled a::attr(href)').extract()) == 0:
            next_page = response.css('li.next a::attr(href)')[0].extract()
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)
        else:
            yield scrapy.Request(self.start_urls[0], callback=self.parse)

上面的代码会报错:

  • no more duplicates will be shown (see DUPEFILTER_DEBUG to show all duplicates)

如何使出现异常仍然可以继续进行呢?
谢谢

关注 4 回答 3

linkBG 提出了问题 · 2017-09-26

regex中灵活匹配

匹配的数据并不是规则的。
待处理数据文本-》比如:

h|aaaaaaaaaa| k/kkk/ e/eeeee/
h|bbbbbbbbbb| k/oooooo/ e/rrrrrr/
h|cccccccccc| k/pppppp/ e/qqqqqq/

#数据中‘h|’ ‘k/’ 'e/'是字段名称,下面的情况

数据大概是这样的,然后写了下面的regex

h\|(.*?)\|\sk\/(.*?)\/\se\/(.*?)\/

但在测试中发现,有些数据:

情况(1):h|aaaaaaaaaa| k/kkk/ #只存在k/ 
情况(2):h|aaaaaaaaaa| #k/和e/都不存在
情况(3):h|aaaaaaaaaa| k/kkk/ 其他信息不确定的数据长度 e/eeeee/ # k/和e/中存在其他字段

像上述三种情况,如何才能使上述的正则能匹配到呢?或者还是需要怎么修改呢?谢谢~

关注 3 回答 2

linkBG 提出了问题 · 2017-06-29

Scrapy存在内存泄漏的问题。

再编写爬虫的时候,总是跑了一段时间(不会超过12个小时)就会被OOM掉。很是无奈!!!
根据官方的文档, 使用这个prefs()但是实在找不出问题的所在。

Live References

HtmlResponse                       42   oldest: 753s ago
MySuteSpider                        1   oldest: 2964s ago
Request                         32412   oldest: 2920s ago
Selector                           42   oldest: 751s ago
TripItem                           37   oldest: 751s ago

爬虫的处理是获取所有页面的a标签的链接:

#获取域名的后缀
def get_domain_suffix(domain):
    if 'com' in tldextract.extract(domain).suffix:
        return True
    return False
#拼接域名。只存主域名
def save_domain(domain):
    domain_name = tldextract.extract(domain).domain
    suffix_name = tldextract.extract(domain).suffix

    return domain_name + '.' + suffix_name

#获取域名ip
def get_domain_ip(domain):
    try:
        ip = socket.gethostbyname(domain)
        return ip
    except:
        return '114.114.114.114'

# 获取域名所在的国家
def get_domain_ct_iso(ip):
    GEO = geoip2.database.Reader(
        '/var/test/geodb/GeoLite2-City.mmdb')
    r = GEO.city(ip)
    return r.country.iso_code

class MyDomainSpider(scrapy.Spider):
    name = 'my_domain'
    start_urls = [
        'http://xxx.com
    ]

    def parse_items(self, response):
        item = TripItem()
        for url in response.xpath('//a/@href').extract():
            if url.startswith('http'):
                    domain = urlparse.urlparse(url).netloc
                    if get_domain_tw(domain) or get_domain_ct_iso(get_domain_ip(domain)) == 'US':
                        item['domain'] = save_domain(domain)
                        item['ip'] = get_domain_ip(domain)
                        item['datetime'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
                        yield item


    def parse(self, response):
        for url in response.xpath('//a/@href').extract():
            if url.startswith('http'):
                domain = urlparse.urlparse(url).netloc
                if get_domain_tw(domain) or get_domain_ct_iso(get_domain_ip(domain)) == 'US':
                     yield scrapy.Request(url, callback=self.parse_items)

请指教一下谢谢

关注 2 回答 1

linkBG 赞了回答 · 2017-06-18

解决for循环怎么跳出,好像被绕晕了

continue跳出最近(或最内层)的循环, 也就是内部的for.

关注 1 回答 1

linkBG 提出了问题 · 2017-06-18

解决for循环怎么跳出,好像被绕晕了

h = ['hp','op']


for x in ['POP','PHP','PYTHON']:
    for y in h:
        if y in x:
            continue #如果这个跳出循环 ,下一句就不会print
    print x 

我的理解时直接跳出最外层的for循环,可是为什么不是这样呢?

关注 1 回答 1

linkBG 提出了问题 · 2017-06-16

Scrapy忽略google等其他网站

现有项目爬虫很不友好,所以想改一下,有个不知道怎么表达的情况,就是我在爬去目标站点,我不希望我的爬虫会出这个站,但是在实际的情况,当a标签有其他比如广告,更现实的是google这种的。所以我在想有灭有可以建立白名单的情况,在这个列表下,如果存在这个列表那么我就不在加入url中了。我写了下面的代码。但是实际情况不行阿

for url in response.xpath('//a/@href').extract():
    if re.match('^http',url):
        if url not in DOMAINS and not len([x for x in DBD_DOMAINS if x in url]):
            DOMAINS.append(url)
            with open(filename, 'a+') as f:
                 f.write(url+'\r\n')
            yield scrapy.Request(url, callback=self.parse)
DBD_DOMAINS = ['fackbook.com', 'google.com', 'twitter.com', 'yahoo.com','apple.com']

应该怎么修改才能实现呢?谢谢

关注 2 回答 1

linkBG 提出了问题 · 2017-06-16

正则表达式匹配域名的问题

想要提取域名。但是匹配出错。我不知道那边有问题

1, https://www.baidu.com -> ^http[s]{0,1}:\/\/(.*) -> 正常
2, https://www.baidu.com/123 -> 全部包括/123也匹配到了,
3, 还是第2个修改一下正则 ^http[s]{0,1}:\/\/(.*)\/ ,ok解决。
4, 但是发现这个正则匹配不到第1个的了,

怎么才能满足这两种需求呢?
谢谢

关注 3 回答 2

linkBG 赞了回答 · 2017-06-09

解决Mongodb中的insert_many的问题

bypass_document_validation这个参数是忽略MongoDB 3.2中的新特性中的validator;在您的操作中,如果collection设置了validator,通过这个参数可以忽略validator然后插入。

validator您可以理解为一种对field的校验吧,类似于约束的功能。

请参考:

https://docs.mongodb.com/mast...

ordered参数是插入的时候按照提供的数组中的文档的分组后的先后顺序插入,如果设置为true的时候,如果排在前面的document插入失败,就停止插入了。

请参考:

http://mongodb.github.io/node...

Love MongoDB! Have fun!

关注 2 回答 1

linkBG 提出了问题 · 2017-06-08

解决Mongodb中的insert_many的问题

在文档中提到insert_many的参数中并没有像insert那样有check_keys的参数,虽然insert_many在插入时通过ordered参数来控制,不会因为存在错误抛出异常退出影响剩下的插入,但是这条存在问题的数据还是没有插入。
怎么才能让insert_many也支持不检查呢?bypass_document_validation这个参数的意思不是很明了。如果这个参数能控制,那么默认为False的话,应该也时不检查才对。
如果insert_many不能忽略检查,那么insert怎么才能实现ordered参数呢?谢谢

关注 2 回答 1

linkBG 赞了回答 · 2017-06-08

解决Mongodb 中全文索引居然比正则慢

1、text search中出现text_or,text_match是正常的。

2、在您的regex查询由于是大小写不敏感,所以没有用到索引,而是走的全表扫描

所以,您比较出来的结果,还需要进一步看看:

1、text索引的大小;

2、collection的大小;

如果text索引的大小比collection的大小要大的话,可能这里不太适合用text index吧。

另外,文档中提到

If you specify a language value of "none", then the text search uses
simple tokenization with no list of stop words and no stemming.

您查询的‘ere’是没有什么意义,尝试设置$language : none,关闭stemming之类等,看是否性能好一些吧。

供参考。

Love MongoDB! Have fun!


关注 3 回答 1

linkBG 提出了问题 · 2017-06-07

解决Mongodb 中全文索引居然比正则慢

版本:

version:
3.4.3

总的数据量百万级别
创建全文索引:

db.tests.createIndex({'a':'text'}) # a 字段的值很大超过 1024 个字符

查询

db.tests.find({'$text':{'$search':'ere'}).explain('executionStats')

"executionStats" : {
        "executionSuccess" : true,
        "nReturned" : 80018,
        "executionTimeMillis" : 306877,
        "totalKeysExamined" : 83546,
        "totalDocsExamined" : 83546,
        "executionStages" : {
            "stage" : "TEXT",
            "nReturned" : 80018,
            "executionTimeMillisEstimate" : 306699,
            "works" : 167095,
            "advanced" : 80018,
            "needTime" : 87076,
            "needYield" : 0,
            "saveState" : 16525,
            "restoreState" : 16525,
            "isEOF" : 1,
            "invalidates" : 0,
            "indexPrefix" : {
                
            },
            "indexName" : "a_text",
            "parsedTextQuery" : {
                "terms" : [
                    "ii"
                ],
                "negatedTerms" : [ ],
                "phrases" : [
                    "ere"
                ],
                "negatedPhrases" : [ ]
            },
            "textIndexVersion" : 3,
            "inputStage" : {
                "stage" : "TEXT_MATCH",
                "nReturned" : 80018,
                "executionTimeMillisEstimate" : 306649,
                "works" : 167095,
                "advanced" : 80018,
                "needTime" : 87076,
                "needYield" : 0,
                "saveState" : 16525,
                "restoreState" : 16525,
                "isEOF" : 1,
                "invalidates" : 0,
                "docsRejected" : 3528,
                "inputStage" : {
                    "stage" : "TEXT_OR",
                    "nReturned" : 83546,
                    "executionTimeMillisEstimate" : 305932,
                    "works" : 167095,
                    "advanced" : 83546,
                    "needTime" : 83548,
                    "needYield" : 0,
                    "saveState" : 16525,
                    "restoreState" : 16525,
                    "isEOF" : 1,
                    "invalidates" : 0,
                    "docsExamined" : 83546,
                    "inputStage" : {
                        "stage" : "IXSCAN",
                        "nReturned" : 83546,
                        "executionTimeMillisEstimate" : 1103,
                        "works" : 83547,
                        "advanced" : 83546,
                        "needTime" : 0,
                        "needYield" : 0,
                        "saveState" : 16525,
                        "restoreState" : 16525,
                        "isEOF" : 1,
                        "invalidates" : 0,
                        "keyPattern" : {
                            "_fts" : "text",
                            "_ftsx" : 1
                        },
                        "indexName" : "a_text",
                        "isMultiKey" : true,
                        "isUnique" : false,
                        "isSparse" : false,
                        "isPartial" : false,
                        "indexVersion" : 2,
                        "direction" : "backward",
                        "indexBounds" : {
                            
                        },
                        "keysExamined" : 83546,
                        "seeks" : 1,
                        "dupsTested" : 83546,
                        "dupsDropped" : 0,
                        "seenInvalidated" : 0
                    }

不是很理解,为什么需要做 TEXT_OR 和 TEXT_MATCH 的操作?

理想状态下,全文索引应该比正则快,要不然还要全文索引干什么,还是上面的查询条件使用正则(无论存不存在 b_text 索引,避免热数据重启 mongo )都是一样的结果

db.tests.find({'a':{'$regex':'ere','$options':'i'}}).explain('executionStats')

"executionStats" : {
        "executionSuccess" : true,
        "nReturned" : 81319,
        "executionTimeMillis" : 101701,
        "totalKeysExamined" : 0,
        "totalDocsExamined" : 4256954123,
        "executionStages" : {
            "stage" : "COLLSCAN",
            "filter" : {
                "a" : {
                    "$regex" : "ere",
                    "$options" : "i"
                }
            },
            "nReturned" : 81319,
            "executionTimeMillisEstimate" : 101391,
            "works" : 4256956,
            "advanced" : 81319,
            "needTime" : 4175636,
            "needYield" : 0,
            "saveState" : 33964,
            "restoreState" : 33964,
            "isEOF" : 1,
            "invalidates" : 0,
            "direction" : "forward",
            "docsExamined" : 4256954
        }

是不是我打开的方式不对呢?麻烦给指点一下。谢谢

关注 3 回答 1

linkBG 提出了问题 · 2017-06-05

Ajax中接口参数存在单引号,丢失单引号后面的字符

var name = "name:Fu'an"
$.ajax({
  dataType: 'text',
  url: "get_top_count?query=" + name

通过浏览器抓包可以看到:
在传输的时候只有这个 name:Fu

所以,目前想要问问怎么处理这个单引号!~
谢谢

关注 2 回答 1

linkBG 提出了问题 · 2017-06-01

Django中如何使用异步

有个views中的return render需要等待数据库时间长,所以想问问怎么去实现,把 templates先展示出来。然后等待数据的加入,之前有看过这样的文章,但是现在想找,却找不到。可能表达错了。

如果上面的可能不能这样异步做,那么下面这个情况:
有个页面,在页面加载的时候会有个一个前端异步去请求数据,这个数据和这个页面上的数据无关,但是需要根据这个页面的数据做动态的展示。比较贴近的是top统计。比如就是top统计,那么我在这个页面加载之前的views就异步出top的结果,等待前端异步来加载。这个怎么来实现。希望贴一下,简单的views中异步代码。(异步小白)两个问题都是希望现在加载templates。

python 2.7
谢谢

关注 2 回答 2

linkBG 提出了问题 · 2017-05-27

Mongodb全文索引的设置是否合理?

百万的数据量,不算大,有个字段,值的长度 > 100,就是很长,包含中文、英语、几乎所有的字符都存在。使用了全文索引,但是不是很理想:

1,搜索特别慢,即使是使用索引了。

db.tests.find({'$text':{'$search':'test'}})

2,当搜索存在''的时候,虽然会被转换为'\',但是没有任何反映,就好像根本没有在运行一样。反复退出,再开启(指的是客户的mongo),再查询。就会把内存(12G,除去系统能用11G)跑满,直接卡死。硬重启。

db.tests.find({'$text':{'$search':'test\1.06'}}) #想要的。
但是通过web输入会变成
db.tests.find({'$text':{'$search':'test\\1.06'}})

不知道这个样的需求适合建索引吗?
谢谢

关注 3 回答 1

linkBG 提出了问题 · 2017-05-25

Django异步数据请求处理?

有个比较大的数据请求,通过前端异步的方式来请求的。之前我没有考虑到打开多个界面(多个搜索),返回的数据会被之后的请求给你替换掉。就是返回的数据是最后一个请求的
因为我之前的提问:https://segmentfault.com/q/10...我用了全局变量。
之后再改进,存入全局变量的是一个字典,好了。前面的问题解决了。但是但是最严重的问题,这个全局数据会越来越大!!!就是这个数据没有得到释放。
之所以要保留这个数据是因为还有导出的需求,但是这个需求是不确定客户什么是要用,所以,就将所有的查询回的数据保留,这样导出这里就快了。
然后,有想过通过监听浏览器的关闭这个事件,来删除这个全局变量。
不知道有没有其他的方法。谢谢!
有个前提是不加组件的情况下。redis就不能用了

关注 3 回答 2

linkBG 提出了问题 · 2017-05-20

Python全局变量释放?

项目中需要用到全局变量,存储很大的数据量。这个项目一般不会停掉,所以这部分也不会被回收。目前跟踪了一段时间,感觉这部分的内存占据着,很是影响之后的操作。
所以我在想有没有那种可以在每个时间点释放掉。

关注 3 回答 2