真人网上娱乐如何提高爬虫爬取的速度?

( 真人网上娱乐 )

写了个简单的协程爬虫爬取B站用户信息,代码如下:

import requests
import re
import json 
import datetime
import asyncio

def get_info(uid):
    url_info = "http://space.bilibili.com/ajax/member/GetInfo?mid=" #基本信息
    uid = str(uid)
    return loop.run_in_executor(None, requests.get, url_info+uid)

    
async def user_info(num):
    """
    uid = mid
    
    info
    'birthday': 生日
    'regtime': 注册时间
    'attentions': 关注
    'spacesta': ? 
    'attention': 关注人数 
    'toutu': ?
    'sex': 性别
    'fans': 粉丝数
    'friend': 关注?
    'level_info': 等级
    'place': 地理位置
    'face': 头像
    'name': 昵称
    'sign': 简介
    """
    for uid in range(num, num+10):
        info = await get_info(uid)
        info = json.loads(info.text)["data"]
        try:
        # print(datetime.datetime.fromtimestamp(info['regtime']))
            print("ok", uid)
            print(info)
        except UnicodeEncodeError as e:
            print("UnicodeEncodeError:", e)
        except TypeError:
            print(info)
            
loop = asyncio.get_event_loop()
try:
    loop.run_until_complete(asyncio.wait([user_info(x) for x in range(1, 1000, 10)]))
except Exception as e:
    print("Error:", e)

爬取1000条需要45秒左右,这样需要爬20天才能爬完。有没有什么办法提高爬取的速度?

用scrapy

分布式爬虫或者开多个进程

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人网上娱乐Error: Package: python-pip-7.1.0-1.el6.noarch (epel) 应该如何解决?

( 真人网上娱乐 )

Error: Package: python-pip-7.1.0-1.el6.noarch (epel)

这个应该不需要其它描述了吧?运行某个程序时,报了这个错误。网上找了一遍,都没找到解决方案。。。

centos7,自带的是 python2.7.5,不知道有没有冲突?

这不是很提示很明显了,要求2.6安装了2.7

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人娱乐如何根据抓包的抓到的请求头通过代码(python或其他)访问这种资源?

( 真人娱乐 )

我要用python获取一个图片,直接访问不到,通过手机一个翻墙浏览器访问并抓包,抓包结果如下

GET /v4/proxy/8916d706df2ea1131c6f527db8345126 HTTP/1.1
Host: dufhnml5w65la.cloudfront.net
Connection: keep-alive
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; MI 4LTE Build/MMB29M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/46.0.2490.76 Mobile Safari/537.36
Accept: */*
Client2: GJAJdJdDdFbFGBFdZHsBjDYCYB5Gwa6JsadEeAxBwGvGZJsDjF8RRq9Ffofg2ZY1xoHGM6vIEqjOA3JSb5Js+xMq8KIxktbs
uuid: 1dac9a8e0efe7cc6516b41ac48c5bb17647f2098
u2: FHeebBdaCADCAAHfSJ1EVcMCDAQHIe2bnC/aOIgImGxBIEwCLkOP7qrv7akdMQ7/apW6skDpYYRqsfqrQsJnsng0Fjo1qVsQ
versioncode: 25
Accept-Language: zh-CN

你列出来的这种资源叫http头,也叫首部,是http协议的一部分。

但问题是,你这段内容是请求头,获取请求头和获取响应头是两码事,所以,请明确你的需求……

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人亚洲娱乐django记录访问到日志文件中

( 真人亚洲娱乐 )

我需要把用户的日志访问日志到文件中,我在setting.py中做了以下处理。

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(message)s'
        },
        'log': {
            'format': '%(levelname)s %(asctime)s %(message)s'
        }
    },
    'handlers': {
        'null': {
            'level': 'DEBUG',
            'class': 'logging.NullHandler',
        },
        'console': {
            'class': 'logging.StreamHandler',
        },
        'file': {
            'level': 'INFO',
            'class': 'api.Handler.FileHandler', #自定义的类
            'filename': '/var/log/django.log',
            'formatter': 'ndautolog'
        }
    },
    'loggers': {
        #default
        '': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
        'django': {
            'handlers': ['console'],
            'propagate': True,
            'level': 'INFO',
        },
        'django.request': {
            'handlers': ['console', 'file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}

然后在日志中只获取到了warn或更高级别的错误:

WARNING 2016-07-29 15:38:09,901 Not Found: /web/xxxxxx/ post:{
    "check_cmd":"ps -ef |grep xxxxx.xxxx.com|grep nginx |grep -v grep",
    "cmd":"/usr/local/tomcat/xxxxxx.xxxx.com/startup/run.sh",
    "boss_key":"33333333333333333"
}
WARNING 2016-07-29 15:38:09,901 Not Found: /web/xxxxxx/ post:{
    "check_cmd":"ps -ef |grep xxxxx.xxxx.com|grep nginx |grep -v grep",
    "cmd":"/usr/local/tomcat/xxxxxx.xxxx.com/startup/run.sh",
    "boss_key":"33333333333333333"
}
WARNING 2016-07-29 15:38:09,901 Not Found: /web/xxxxxx/ post:{
    "check_cmd":"ps -ef |grep xxxxx.xxxx.com|grep nginx |grep -v grep",
    "cmd":"/usr/local/tomcat/xxxxxx.xxxx.com/startup/run.sh",
    "boss_key":"33333333333333333"
}

我试过在django''中加入'handlers': ['console', 'file'],,但保存的信息不是我要的:

INFO 2016-07-29 15:29:03,888 Scheduler started
DEBUG 2016-07-29 15:29:03,890 Looking for jobs to run
DEBUG 2016-07-29 15:29:03,890 No jobs; waiting until a job is added

这让人很苦恼。

其实你完全没必要把记录日志的工作交给项目来处理
直接丢给nginx来处理就行了,配置nginx的access_log,所有访问都会被记录下来

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人亚洲娱乐python:rpyc获取server端对象

( 真人亚洲娱乐 )

rpyc的client能够调用server端模块,但是会生成新的对象,怎么获取并且修改原来server端的对象?

  • rpyc_server.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
from threading import Thread
from rpyc.utils.server import ThreadedServer
from rpyc.utils.classic import SlaveService
import server_func
import time


class Server(Thread):

    def run(self):
        server = ThreadedServer(SlaveService, hostname='localhost', port=9200)
        server.start()

myclass = server_func.my_class()
print myclass
if __name__ == '__main__':
    #set_var()
    s = Server()
    s.daemon = True
    s.start()
    while(True):
        myclass.print_num()
        while not server_func.rpyc_call_queue.empty():
            method, args, kargs = server_func.rpyc_call_queue.get()
            method(*args, **kargs)
  • server_func.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import time
import Queue


rpyc_call_queue = Queue.Queue()


def rpyc_call(func):
    def _(*args, **kargs):
        rpyc_call_queue.put((func, args, kargs))
    return _


class my_class(object):

    def __init__(self):
        self.a = 0

    @rpyc_call
    def print_num(self):
        print self.a
        self.a = self.a + 1
        time.sleep(1)

    @rpyc_call
    def reset(self):
        self.a = 0
        return self.a

    @rpyc_call
    def get_data(self):
        return self.a
  • rpyc_client.py

#!/usr/bin/python
# -*- coding: utf-8 -*-
import rpyc

connection = rpyc.classic.connect("localhost", 9200)
connection.modules.rpyc_server.myclass.print_num()
connection.close()

每执行一次客户端都会在服务端打印出加1的数,但是原服务端的数不受影响,但是多个客户端连接服务器修改的却是同一个对象:

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人网上娱乐如何让 flask 中 secure_filename 方法能够验证中文?

( 真人网上娱乐 )

大家都知道将中文文件名传给 secure_filename 方法时所有的中文名都会被去掉,如何让 secure_filename 支持中文呢?或者有什么可以替代的库供使用?

按源码照抄一个,关键就这行。
https://github.com/pallets/we…
压制并抛弃非ascii字符

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人网上娱乐mongodb用python插入2个集合相同_id

( 真人网上娱乐 )

就是有2个集合,
然后2个集合同时插入数据。
希望数据的_id是一样的。我插入的时候老是相差1。
想问怎么实现,谢谢了

插入数据前用 _id = ObjectId() 生成id 并且放到两个dict中 后 执行保存动作

shell下面的写法是

var id = new ObjectId();
db.coll_1.insert({
    _id: id,
    ...    // 其他字段
})
db.coll_2.insert({
    _id: id,
    ...    // 其他字段
})

总之自己new一个ObjectId就可以了。

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人娱乐如何通过id返回详细的搜索结果?

( 真人娱乐 )

新手问题,请高手指导下,
以下代码取出符合条件的包含所有字段的记录


pagination=Repair.query.order_by(Repair.StartTime.desc()).paginate(
    page,per_page=10,error_out=False)
repairs=pagination.items

return render_template('index.html',repairs=repairs,pagination=pagination)

html通过一个循环显示一个包含特定字段的表格,现在我点击其中一行,弹出一个模态框,希望能显示这条记录的详细情况(包含该条记录的所有字段)。目前通过javascript已取到点击的id,这个循环该怎么写,返回这条id记录的所有段信息?


<table class="table table-striped table-bordered table-hover" style="text-align:center">
<thead>
    <tr>
        <th>Case ID</th>
        <th>主机名</th>
        <th>标题</th>
        <th>状态</th>
        <th>功能</th>
    </tr>
</thead>
<tbody>
    
    {% for u in repairs %}
    <tr>
        <td>{{ u.id }}</td>
        <td>{{ u.Hostname }}</td>
        <td>{{ u.Subject }}</td>
        <td>{{ u.StartTime }}</td>
        <td>{{ u.Status }}</td>

        <td>
            <button class="btn btn-xs btn-info" id="{{ u.id }}" " data-toggle="modal" data-target=#rolePopup>
            Info
            </button>
            <button class="btn btn-xs btn-success">Reply</button>
            <div class="btn-group">
                <button type="button" class="btn btn-xs btn-primary dropdown-toggle"
                    data-toggle="dropdown">
                    Warning <span class="caret"></span>
                </button>
            <ul class="dropdown-menu" role="menu">
                <li><a href="#"><span class="pull-left"><i class="fa fa-arrow-circle-right"></i></span>Send mail</a></li>
                <li><a href="#"><span class="pull-left"><i class="fa fa-arrow-circle-right"></i></span>Send SMS</a></li>
            </ul>
            </div>
        </td>
    </tr>
    {% endfor %}
</tbody>
<tfoot></tfoot>
    
</table>

那几行td用tr/div打包一下,加个id属性对应纪录id,然后jquery整个on click监视,点击后检查并删除modal已存在的div,更新对应id的div到modal,搞掂。
上面方法效率很低,建议还是flask搞个路由接收纪录id。点击后ajax提交id,flask套模版生成几个td的html然后返回,异步更新到modal。不在后端生成就返回json前端拼接。

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人亚洲娱乐在没有webui情况下,如何使用pyspider调试爬虫?

( 真人亚洲娱乐 )

我们的pyspider部署在远程服务器上,只能通过shell远程登录文本界面,webui没法访问。
请问如何在远程服务器上调试爬虫?例如部署爬虫代码,启动project,停止project等。

自己稍微研究了pyspider源码,成功试验了一个方案。方案背景如下:
1)首先,在webui里编写代码后点击保存时会将代码按照一定的格式写入数据库;
2)把工程状态改成RUNNING时会更新数据库中status字段;
3)最后点击“run”按钮时浏览器会发送一个run的post请求到webui/index.py中的runtask()函数,然后爬虫便开始执行。
基于以上背景,在不能通过webui开发的情况下可以通过以下方式启动爬虫代码:
1)将开发好的爬虫代码按照pyspider的要求的格式写入数据库(这里用的是mongodb,使用pymongo操作数据库);
2)通过代码将爬虫状态更新为RUNNING或DEBUG;
3)使用requests库模拟发送一个run按钮的post请求。
需要注意的是,在步骤2中更新状态后,正在运行的pyspider不一定会立马感知到状态变化,默认每隔一段时间刷新一次状态。所以要在状态刷新后执行步骤3才能生效。

建议你试试这样的方式,利用fabric来做远程命令客户端,利用supervisord来管理你的爬虫进程,这样就可以了,嗯嗯

你可以在本地创建一个脚本文件 sample.py
然后使用 pyspider one -i sample.py 进行调试

http://docs.pyspider.org/en/l…

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人娱乐python字典替换难题

( 真人娱乐 )

{'loc': '22.2500,114.1667', 'city': '', 'country': 'HK', 'region': '', 'hostname': 'No Hostname', 'ip': '180.150.157.21', 'org': 'AS45187 Rackspace IT Hosting AS IT Hosting Provider Hong Kong'}

把里面的’loc’替换为’经纬度’, ‘city’替换为’城市’, ‘country’替换为’国家代码’, ‘region’替换为’地区’, ‘hostname’替换为’主机名’, ‘ip’替换为’ip地址’, ‘org’替换为’网络服务商’

该怎么操作,因为value是会变的,所以只能批量替换为这个,还要注意中文。我开头已经加了#-– coding:utf-8 –

>>> d = {'loc': '22.2500,114.1667', 'city': '', 'ip': '180.150.157.21', 'region': '', 'hostname': 'No Hostname', 'country': 'HK', 'org': '
AS45187 Rackspace IT Hosting AS IT Hosting Provider Hong Kong'}
>>> dk = { "loc": "经纬度", "city": "城市"}
>>> for key, value in dk.items():d[value] = d.pop(key)
...
>>> d
{'\xe5\x9f\x8e\xe5\xb8\x82': '', 'ip': '180.150.157.21', 'region': '', 'hostname': 'No Hostname', '\xe7\xbb\x8f\xe7\xba\xac\xe5\xb
a\xa6': '22.2500,114.1667', 'country': 'HK', 'org': 'AS45187 Rackspace IT Hosting AS IT Hosting Provider Hong Kong'}
>>>

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人网上娱乐很纠结: @装饰器 和 @Username 同时都需要用到 @ 符号,怎么办?

( 真人网上娱乐 )

现在开发的一个系统,在文章中用户 @ZhangSan 就可以点名 ZhangSan 来看这篇文章,同时还有授权给 Zhangsan 阅读这篇文章的权限。由于系统还提供用户发布 Markdown 格式文章的功能,特别当用户是发布代码时,代码中含有装饰器 @decorator ,就会有 @符号。这个时候,本来被 pre/code 包裹的代码片段,就被系统的 @Username 给破坏啦。

目前有考虑几个方案:

1 、给用户一个选项:这篇文章是否禁止@Username
2 、提示让用户用 @特殊符号,代替代码中 @ 符合。
3 、有什么方式去区分用户到底是在 @Username,还是在 @decorator 装饰器?

上面 3 个方式目前都有问题,方式 1 就是 90%以上的情况都不需要用到功能,要一直占着一个重要位置;方式 2 会给用户添麻烦;方式 3 只能通过 Markdown 语法代码前面会有 4 个空格来区分,但是一旦用户没有完全遵守这个方式,或者直接加 pre/code 包裹,同样会被 @Username 破坏样式。还有其他什么好的方式可以考虑吗?

  1. decorator name 不是那麼容易就跟 user name 重複的吧

  2. 本来被 pre/code 包裹的代码片段,就被系统的 @Username 给破坏啦, 這句有點不太懂, pre/code 是什麼?

你可以參考 segmentfault 的方式阿:

  1. 如果 @ 使用在 code block 或是 inline code 之中, 則一律當成純文字處理

  2. 如果 @ 不是在 code block 或是 inline code 之中使用, 且後面跟隨的 name 是 UserName 那麼就當成 tag 用戶的功能

  3. 甚至還可以學 segmentfault 在使用 @ 的時候, 跳出可選用戶出來, 如果選擇就當作 tag user, 不選當作純文字


我回答過的問題: Python-QA

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人亚洲娱乐用python制作视频

( 真人亚洲娱乐 )

1.有好几个图片,然后每个图片作为视频帧播放十秒或五秒。
2.添加故事语音。
3.再添加背景音乐。
4.最后生成mp4文件。

大家有没有好的思路和方案?

题主可以用opencv的VideoCapture和VideoWriter类分别读写视频,比如

videoWriter.write(frame) # 可以在当前帧位置插入frame
VideoCapture.read() # 可以获取下一帧的位置

(看完/读完)这篇文章有何感想! 真人亚洲娱乐的分享…

真人网上娱乐python3 多继承的super init问题

( 真人网上娱乐 )

python中,如果存在多继承,例如

class Song(object):
    """docstring for Song"""
    def __init__(self, author):
        super(Song, self).__init__(author)
        self._author = author
class Singer(object):
    """docstring for Singer"""
    def __init__(self, name):
        super(Singer, self).__init__(name)
        self._name = name
class Mtv(Song, Singer):
    """docstring for RockSong"""
    def __init__(self, name, author):
        super(RockSong, self).__init__(name)

Mtv继承song与singer,在init方法里,如何是的两个父类进行初始化,并且完成属性赋值?

使用 super() 的辦法:

class Song(object):
    def __init__(self, author):
        self._author = author

class Singer(object):
    def __init__(self, name):
        self._name = name

class Mtv(Song, Singer):
    def __init__(self, name, author):
        super().__init__(author) # init Song
        super(Song, self).__init__(name) # init Singer

mtv = Mtv('name', 'author')
print('mtv._author =', mtv._author)
print('mtv._name =', mtv._name)
# Mtv 的 MRO
(<class '__main__.Mtv'>, <class '__main__.Song'>, <class '__main__.Singer'>, <class 'object'>)`
  • SongSinger 不必呼叫 super

  • super(type, obj_or_type) 會按照 MRO 的順序去委託 type父類兄弟類 的方法來調用

    • super().__init__(author) 會找到 <class '__main__.Song'> 並調用其 __init__(author)

    • super(Song, self).__init__(name) 會找到 <class '__main__.Singer'> 並調用其 __init__(name)

結果:

mtv._author = author
mtv._name = name

P.S. 如果你是使用 Python3, 那一般的 class 不必繼承 object


這篇講的很棒, 完全理解 super: 理解 Python super

直接補上文章中的精華:

  • super 及他的兩個參數在做甚麼:

def super(cls, inst):
    mro = inst.__class__.mro()
    return mro[mro.index(cls) + 1]
  • MRO 的順序

在 MRO 中,基类永远出现在派生类后面,如果有多个基类,基类的相对顺序保持不变。


我回答過的問題: Python-QA

跟你继承的顺序有关,会先调第一个父类Song的构造,假设Song也继承了某个类X,那么再会调X的构造。完事之后再回来调Singer的构造。类似深度优先的原则

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人网上娱乐通过已有cookies模拟登录有赞,可以实现吗?

( 真人网上娱乐 )

有赞的这个登录界面域名:https://login.youzan.com/sso/index?service=kdt
但是,登录之后就跳转到了:https://koudaitong.com/v2/account/team#selectxXX
我已经用chrome找出了这个网站的cookies,下面如何用Python模拟登录有赞?
我看了几篇攻略,有点说直接用requests的session,有的说要用urllib2。
大神来给下思路吧,,登录界面是需要验证码的,验证码地址:https://login.youzan.com/sso/index/captcha

登录就是为了取cookie,你有了cookie干嘛还要登录?

你是要模拟登录,那么从chrome找cookie出来用是没有必要的。
我看了一下登录时的请求数据,你只要使用post方式请求https://login.youzan.com这个url,然后在内容中附上账号密码验证码等信息就可以实现了,至于验证码你是可以事先爬下来看的。
post的数据我截了一张图,你可以看一下:

希望帮到你,如果不行请把你的问题再贴详细一点,现在做到哪一步了这些情况都可以贴上来

登录后你想干什么呢?

(看完/读完)这篇文章有何感想! 真人网上娱乐的分享…

真人娱乐Django中与后台数据库查询的一个问题?

( 真人娱乐 )

比如我有一个列表[2,6,8,12,25,27],想查询列表中对应id在数据库表table中的内容。

平常我们获得全部内容是用Table.objects.all()
django中有没有这种功能,就是把整个列表当成参数,直接获得表中对应id的内容。

django小白,如果没有这样的方法,那上面的需求该怎么解决呢?谢谢大家了

objects.filter(id__in =[1,2,3])

(看完/读完)这篇文章有何感想! 真人娱乐的分享…

真人娱乐pythonTidy?

( 真人娱乐 )

Perl中有个很好用的工具叫PerlTidy可以实现如下功能

$a=1;
$b = "hello";
$foo = "bar";
$helloworld = "abc";

变为

$a          = 1;
$b          = "hello";
$foo        = "bar";
$helloworld = "abc";

请问Python有可以实现类似排版的tidy工具么?

众所周知,Perl和Python的文化在很多方面是不同的。PEP20中提到了其中一点,There should be one– and preferably only one –obvious way to do it.

你提到的这种对齐方式与PEP8的要求不符,所以不太可能被主流的工具支持。当然,你要是打算自己写个Python Tidy,也没人拦着你。

(看完/读完)这篇文章有何感想! 真人娱乐的分享…