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
winnerczwx
V2EX  ›  Python

关于爬虫并发量的疑问

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

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

    求大佬们解惑
    第 1 条附言  ·  2020-07-14 00:25:23 +08:00
    附加一下相关信息:

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

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

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

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

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

    楼主不妨本地建一个,镜像站,然后你爬 127.0.0.1 试下能不能上去。
    warcraft1236
        18
    warcraft1236  
       2020-07-14 10:43:30 +08:00
    scrapy 的并发配置贴出来看看?
    d0v0b
        19
    d0v0b  
       2020-07-14 12:22:43 +08:00
    @winnerczwx 恶意爬虫我的理解就是影响别人赚钱了,else 你爱咋咋滴
    Cy86
        20
    Cy86  
       2020-07-18 21:40:11 +08:00
    @herozzm 每秒 1000 么, 我家运营商貌似限制 500 并发
    Kvip
        21
    Kvip  
       2020-07-20 16:54:51 +08:00
    还是各位大佬勇啊,我搞爬虫从来不敢搞那么大并发,我开线程都不敢超过 50 个。一是人家运营网站也不容易,我们算是白嫖就别那么过分。其次是并发量太大,人家后台很容易看出来的,哪天被找上门了都没得后悔,毕竟很多爬虫都是违法的。
    2088TXT
        22
    2088TXT  
       2020-07-24 10:55:41 +08:00
    原则上不遵守 robots.txt 的不都是恶意爬虫 ?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:44 · PVG 21:44 · LAX 05:44 · JFK 08:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.