V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
GeekHub
winnerczwx
V2EX  ›  Python

关于爬虫并发量的疑问

  •  
  •   winnerczwx · 68 天前 · 1550 次点击
    这是一个创建于 68 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在使用 scrapy 框架的过程中发现并发量上不去, 大概每秒 50 左右...想了解一下爬虫并发量除了跟网络, 源站点, 业务逻辑以外, 还有哪些因素会影响并发量呢?

    1. 框架的并发设置是 500( 实际只有 50 )
    2. 源网站性能应该是没问题的
    3. 带宽 100M(实际并跑不满, 每秒大概只有 1M 左右)
    4. 业务没有复杂逻辑, 页面下载完后就两个 xpath, 2 个正则, 然后就入库了
    5. 硬盘是阿里云的云盘, 大概是 1240 IOPS 左右
    6. 服务器 cpu 是 2 核的 (不知道是不是因为配置太低成为了瓶颈)

    求大佬们解惑
    第 1 条附言  ·  68 天前
    附加一下相关信息:

    1. 单个页面大小在 3.4kb 左右
    2. cpu 稳定在 40% - 50%
    3. 内存在 14% 左右
    4. 单次入库的数据, 每个请求大约是几百汉字
    22 条回复    2020-07-24 10:55:41 +08:00
    opengps
        1
    opengps   68 天前   ❤️ 1
    你怎么确定源站服务器性能没问题?你这么疯狂爬取,最大的问题就是源站压力,每秒 50,一个页面怎么说也得有几次的硬盘读取,普通硬盘的话 io 可能已经到了极限了
    winnerczwx
        2
    winnerczwx   68 天前
    @opengps 因为我也想知道是不是源站服务器有压力...所以在爬取过程中也访问了源站的页面, 依旧是瞬间打开.... 一个页面没多少东西,去掉页头页尾和一些广告,正文部分只有几百字
    guochao
        3
    guochao   68 天前
    祭出祖传 brendan gregg 的图
    http://www.brendangregg.com/Perf/linux_observability_tools.png

    这玩意儿建议你在本地做个 benchmark 。如果本地做不了,就监测服务器的指标,主要是 CPU 使用率、CPU 负载、内存、SWAP 、磁盘 bandwidth 、磁盘 iops 、磁盘 latency 、带宽占用、网络延迟这些。要不然谁都不知道你这是什么问题

    监控是比较模糊的。有条件的话还做全栈追踪,比如说试试看 zipkin 这类东西,看看具体什么东西在哪里花了多久。
    heiheidewo
        4
    heiheidewo   68 天前   ❤️ 1
    真特么服了楼主这种,我以前碰到一个人爬我的数据,nginx 设置了单个 ip 每秒请求 100 次,活生生被这个人打满了,最后我也没屏蔽他的 IP 。
    恶意爬虫就应该被抓起来批斗
    winnerczwx
        5
    winnerczwx   68 天前
    @guochao 感谢!
    winnerczwx
        6
    winnerczwx   68 天前
    @heiheidewo 请问怎样的爬虫属于善意, 怎样的又属于恶意?
    heiheidewo
        7
    heiheidewo   68 天前
    @winnerczwx 只要影响了别人网站的业务就是恶意爬虫,要是不影响那就无所谓吧
    just1
        8
    just1   68 天前
    top 看一下系统资源占用吧
    jugelizi
        9
    jugelizi   68 天前 via iPhone
    控制频率是每个爬虫工程师值得做的事情
    winnerczwx
        10
    winnerczwx   68 天前
    @heiheidewo 我在评论里回复了, 爬取过程中我访问他页面是瞬间打开的, 跟平时没有区别... 而且当时在凌晨, 那个时间段我估计他网站也没有流量
    winnerczwx
        11
    winnerczwx   68 天前
    @just1 cpu 在百分之 40-50 左右, 内存在百分之十几
    jones2000
        12
    jones2000   68 天前
    都是开源的直接看源码呗, 查下这个并发是同时启动 500 个线程吗?如果不是,就改源码同时开 500 个线程同时抓。
    jones2000
        13
    jones2000   68 天前
    先确保你这个“并发设置是 500” 是 1 个进程里同时开 500 个线程去抓取吗? 还是使用多进程+多线程的方式达到 500 个同时抓。
    herozzm
        14
    herozzm   68 天前
    我用 go 写的爬虫,家用带宽,爬的外面的多个网站,1000 多并发一点问题没有啊
    locoz
        15
    locoz   68 天前 via Android
    你可以打日志记录一下请求、解析、入库这三步每一步的耗时,这样就能很直观地看出哪一步慢、哪一步会被别的东西卡住了,然后再继续细化日志粒度、结合断点就能找到问题点。

    另外,单机 50 并发对于单个网站而言已经挺高了,更别提 500 了…建议别搞那么高并发,对你自己好对别人服务器也好。
    locoz
        16
    locoz   68 天前 via Android
    @heiheidewo #7 也不一定,涉及到别人的利益也可以是恶意爬虫🤣
    imdong
        17
    imdong   67 天前
    并发跑 500 。不知对方是什么网站,怎么得罪人了...

    一秒跑 50 个,对于普通个人小站来说,已经是挺大的负载了(如果都是动态页的话)。

    楼主不妨本地建一个,镜像站,然后你爬 127.0.0.1 试下能不能上去。
    warcraft1236
        18
    warcraft1236   67 天前
    scrapy 的并发配置贴出来看看?
    d0v0b
        19
    d0v0b   67 天前
    @winnerczwx 恶意爬虫我的理解就是影响别人赚钱了,else 你爱咋咋滴
    Cy86
        20
    Cy86   63 天前
    @herozzm 每秒 1000 么, 我家运营商貌似限制 500 并发
    Kvip
        21
    Kvip   61 天前
    还是各位大佬勇啊,我搞爬虫从来不敢搞那么大并发,我开线程都不敢超过 50 个。一是人家运营网站也不容易,我们算是白嫖就别那么过分。其次是并发量太大,人家后台很容易看出来的,哪天被找上门了都没得后悔,毕竟很多爬虫都是违法的。
    2088TXT
        22
    2088TXT   57 天前
    原则上不遵守 robots.txt 的不都是恶意爬虫 ?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2144 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 01:46 · PVG 09:46 · LAX 18:46 · JFK 21:46
    ♥ Do have faith in what you're doing.