Docker scrapy redis spalsh 爬虫踩坑

首先说个结论,很多问题都是墙引起的.

1.Docker如果不设置好proxy,用起来会非常痛苦.我用了Proxychains + 本地socks5代理,不然速度慢的让你有种被虐的感觉.当然,临时用也可以用export的方式,比如Ubuntu中可以用sudo apt-get -o Acquire::socks::proxy=”socks://127.0.0.1:8399/” update

2.Docker splash安装后会发现在Web端无法渲染有些网站,这里也是Github源码中用了一些境外的js,这些被墙了.对,没错,这些也能被墙.下面链接可以参考,主要是替换resources.py中的两个文件http://libs.baidu.com/jquery/1.11.1/jquery.min.js, https://ajax.aspnetcdn.com/ajax/jquery.migrate/jquery-migrate-1.2.1.js

docker ps

docker exec -u 0 -it ed39a8b02925 /bin/bash

https://blog.csdn.net/qq_42078965/article/details/108812636

说到代理,下面的代码适合socks5代理github,不然访问github太慢了:

git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

3. WSL内存管理有问题,splash运行一段时间机器内存就会炸掉。目前的workaround是用脚本监控系统内存并重启container:

import psutil
import os 
import time
import subprocess

def id_find():
    tmp = str(subprocess.check_output('sudo docker ps', shell=True)).split('\\n')
    print(tmp)
    if tmp[1] ==  "'":
        print('no container_id exists')
        return 0
    else:        
        print('one container_id found')
        container_id = tmp[1].split(' ')[0]
        print('container_id 1:', container_id)
        return container_id    
    
while True:
    mem = psutil.virtual_memory()
    total = str(round(mem.total / 1024 / 1024))
    #round方法进行四舍五入,然后转换成字符串 字节/1024得到kb 再/1024得到M
    used = str(round(mem.used / 1024 / 1024))
    use_per = str(round(mem.percent))
    free = str(round(mem.free / 1024 / 1024))
    print("您当前的内存大小为:" + total + "M")
    print("已使用:" + used + "M(" + use_per + "%)")
    print("可用内存:" + free + "M")
    container_id = id_find()
    print('container_id return:', container_id)
    if container_id == 0:        
        time.sleep(3)
        os.system('sudo docker run -itd -v ~/default.ini -p 8050:8050 scrapinghub/splash /bin/bash --max-timeout=3600')
        time.sleep(5)
        # os.system('sudo docker container prune') # remove all stopped containers. CAUTION!!!!
    else:
        print('one container_id found: ', container_id)
        if int(use_per) > 90:
            os.system(f'sudo docker restart {container_id}')
            # os.system(f'sudo docker run -itd -v lagoucrawl\default.ini -p 8050:8050 scrapinghub/splash /bin/bash --max-timeout=600')
            time.sleep(3)
            # os.system('sudo docker container prune') # remove all stopped containers. CAUTION!!!!
        else:
            time.sleep(3)

这里的default.ini是我的多贝云代理文件,内容如下:

[proxy]
   
host=http-proxy-t1.dobel.cn
port=9180

username=BOSSZxxxxxxx
password=yyyyyyy

因为我用了scrapy-redis-splash这个框架,不能直接套用scrapy代理的方式,实践证明这个是有效也是最简单的splash proxy方法。

说到这儿,顺便说下docker的加速(以阿里云为例):

{
  "registry-mirrors": [
    "https://qbsssss.mirror.aliyuncs.com"
  ],
  "insecure-registries": [],
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  }
}

上面的连接登录阿里云之后能找到,Google下即可。这里有个坑,如果你用国外阿里云账号登录,是死活找不到这个链接的!

因为GFW的缘故,国内很多技术人员获取最先进的技术资料是很困难的。仅仅说proxy,不同的平台设置都不一样,github, wget, docker。。。。。。即使是proxychains也不是一站式解决方案。

4. Redis看起来简单,也是很多坑需要踩的。比如,强制停止爬虫程序后重启之前可能需要删除redis中的requests,不然爬虫程序可能无法继续。

全国三甲医院数据分析-pyecharts动态图表可视化

1200+三甲医院地理坐标(百度地图API),数据处理和分析,pyecharts数据可视化

https://www.linkedin.com/feed/update/urn:li:activity:6642160429646868480

https://lnkd.in/f78_A3T
Within one or days, I did ETL on 1200+ top hospitals in China. 30000hospitals of which 3000 were tier 3. Only 1200+ tier 3 Top Class.
Data crawling was done a few weeks ago. Recently I put the data into mysql. Then I did data cleaning and processing with MySQL and python. Finally data visualization was done with Pyecharts.
Feel free to review it on my website. It’s in html tabs and easy to view. Very interactive Charts!
To your surprise, Wuhan or Hubei has one of the best medical resources in China. Virus like this is beyond capability of any emergency systems in any countries.
嗯,天快亮了。花了一两天时间把全国1200+三甲医院的数据(全国3万家左右医院,提取出不到3000三级,三甲其实才1200+)提取出来(在我这个链接里你可以看到每家三甲医院的地理位置和电话),处理分析了下,一共12张动态图,做成了html,欢迎大家打开链接观赏下,不看你会后悔的,开心一笑!
大家一定要打开网页看下,手机调成横屏。一共12个标签页,因为这样更方便看图。有时间我再出个简单的分析报告和处理流程,放在自己的网站。你的点击能助力那些想学习数据分析而又找不到敲门的朋友找到我的网站[Shake]如果有朋友懂得运营,欢迎指点迷津,有志于做个高质量的技术博客。
这些漂亮的动态图之后是几十个小时的数据处理,这两天代码敲的都快折了!一共700-800行代码,包括爬虫,导入数据库(mysql里也做了些简单的分析处理),数据清洗,数据处理,数据分析和可视化。用到的工具主要是python,pyecharts,json,mysql。
睡个觉,该起来吃早饭了,忙的一天只吃了一顿饭。