23个Python爬虫开源项目代码,包含微信、淘宝、豆瓣、知乎、微博等

  今天为大家整理了23个Python爬虫项目。整理的原因是,爬虫入门简单快速,也非常适合新入门的小伙伴培养信心,所有链接指向GitHub,微信不能直接打开,老规矩,可以用电脑打开。
  
  关注公众号「Python专栏」,后台回复:爬虫书籍,获取2本Python爬虫相关电子书。
  
  Python专栏二维码
  
  1. WechatSogou – 微信公众号爬虫
  
  基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成基于搜狗搜索的爬虫,返回结果是列表,每一项均是公众号具体信息字典。
  
  github地址:
  
  https://github.com/Chyroc/WechatSogou
  
  2. DouBanSpider – 豆瓣读书爬虫
  
  可以爬下豆瓣读书标签下的所有图书,按评分排名依次存储,存储到Excel中,可方便大家筛选搜罗,比如筛选评价人数>1000的高分书籍;可依据不同的主题存储到Excel不同的Sheet ,采用User Agent伪装为浏览器进行爬取,并加入随机延时来更好的模仿浏览器行为,避免爬虫被封。
  
  github地址:
  
  https://github.com/lanbing510/DouBanSpider
  
  3. zhihu_spider – 知乎爬虫
  
  此项目的功能是爬取知乎用户信息以及人际拓扑关系,爬虫框架使用scrapy,数据存储使用mongo
  
  github地址:
  
  https://www.ysptvip1.com github.com/LiuRoy/zhihu_spider
  
  4. bilibili-user – Bilibili用户爬虫
  
  总数据数:20119918,抓取字段:用户id,昵称,性别,头像,等级,经验值,粉丝数,生日,地址,注册时间,签名,等级与经验值等。抓取之后生成B站用户数据报告。
  
  github地址:
  
  https://www.mtyl127.com github.com/airingursb/bilibili-user
  
  5. SinaSpider – 新浪微博爬虫
  
  主要爬取新浪微博用户的个人信息、微博信息、粉丝和关注。代码获取新浪微博Cookie进行登录,可通过多账号登录来防止新浪的反扒。主要使用 scrapy 爬虫框架。
  
  github地址:
  
  https://www.xinhuiyule1.cn github.com/LiuXingMing/SinaSpider
  
  6. distribute_crawler – 小说下载分布式爬虫
  
  使用scrapy,Redis, MongoDB,graphite实现的一个分布式网络爬虫,底层存储MongoDB集群,分布式使用Redis实现,爬虫状态显示使用graphite实现,主要针对一个小说站点。
  
  github地址:
  
  https://www.gcyl159.com/ github.com/gnemoug/distribute_crawler
  
  7. CnkiSpider – 中国知网爬虫。
  
  设置检索条件后,执行src/CnkiSpider.py抓取数据,抓取数据存储在/data目录下,每个数据文件的第一行为字段名称。
  
  github地址:
  
  https://www.mren2yule.com github.com/yanzhou/CnkiSpider
  
  8. LianJiaSpider – 链家网爬虫。
  
  爬取北京地区链家历年二手房成交记录。涵盖链家爬虫一文的全部代码,包括链家模拟登录代码。
  
  github地址:
  
  https://www.yongshiyule178.com github.com/lanbing510/LianJiaSpider
  
  9. scrapy_jingdong – 京东爬虫。
  
  基于scrapy的京东网站爬虫,保存格式为csv。
  
  github地址:
  
  https://www.dfgjpt.com github.com/taizilongxu/scrapy_jingdong
  
  10. QQ-Groups-Spider – QQ 群爬虫。
  
  批量抓取 QQ 群信息,包括群名称、群号、群人数、群主、群简介等内容,最终生成 XLS(X) / CSV 结果文件。
  
  github地址:
  
  https://www.yongshi123.cn github.com/caspartse/QQ-Groups-Spider
  
  11. wooyun_public - 乌云爬虫。
  
  乌云公开漏洞、知识库爬虫和搜索。全部公开漏洞的列表和每个漏洞的文本内容存在MongoDB中,大概约2G内容;如果整站爬全部文本和图片作为离线查询,大概需要10G空间、2小时(10M电信带宽);爬取全部知识库,总共约500M空间。漏洞搜索使用了Flask作为web server,bootstrap作为前端。
  
  https://github.com/hanc00l/wooyun_public
  
  12. spider – hao123网站爬虫。
  
  以hao123为入口页面,滚动爬取外链,收集网址,并记录网址上的内链和外链数目,记录title等信息,windows7 32位上测试,目前每24个小时,可收集数据为10万左右
  
  https://www.120xh.cn github.com/simapple/spider
  
  13. findtrip – 机票爬虫(去哪儿和携程网)。
  
  Findtrip是一个基于Scrapy的机票爬虫,目前整合了国内两大机票网站(去哪儿 + 携程)。
  
  https://www.dfgjyl.cn github.com/fankcoder/findtrip
  
  14. 163spider
  
  基于requests、MySQLdb、torndb的网易客户端内容爬虫
  
  https://www.078881.cn github.com/leyle/163spider
  
  15. doubanspiders
  
  豆瓣电影、书籍、小组、相册、东西等爬虫集
  
  https://www.jiahuayulpt.com github.com/fanpei91/doubanspiders
  
  16. QQSpider
  
  QQ空间爬虫,包括日志、说说、个人信息等,一天可抓取 400 万条数据。
  
  https://github.com/LiuXingMing/QQSpider
  
  17. baidu-music-spider
  
  百度mp3全站爬虫,使用redis支持断点续传。
  
  https://github.com/Shu-Ji/baidu-music-spider
  
  18. tbcrawler
  
  淘宝和天猫的爬虫,可以根据搜索关键词,物品id来抓去页面的信息,数据存储在mongodb。
  
  https://www.thd178.com/ github.com/pakoo/tbcrawler
  
  19. stockholm
  
  一个股票数据(沪深)爬虫和选股策略测试框架。根据选定的日期范围抓取所有沪深两市股票的行情数据。支持使用表达式定义选股策略。支持多线程处理。保存数据到JSON文件、CSV文件。
  
  https://www.yongxin7.com github.com/benitoro/stockholm
  
  20. BaiduyunSpider - 百度云盘爬虫。
  
  https://www.68079.cn github.com/k1995/BaiduyunSpider
  
  21. Spider
  
  社交数据爬虫。支持微博,知乎,豆瓣。
  
  https://www.68076.cn github.com/Qutan/Spider
  
  22. proxy pool
  
  Python爬虫代理IP池(proxy pool)。
  
  https://www.mhylpt.com github.com/jhao104/proxy_pool
  
  23. music-163
  
  [root@app51 docker]# docker run -d --name nginx-c1 --cpu-quota 50000 nginx:latest
  
  e9432a513e4bed0a744a29a8eaba2b27d9e40efabfe479d19d32f9558888ed29
  
  [root@app51 docker]#
  
  此时我们查看cpu对应的容器资源限制:
  
  [root@app51 docker]# cd /sys/fs/cgroup/cpu/docker/
  
  [root@app51 docker]# cat e9432a513e4bed0a744a29a8eaba2b27d9e40efabfe479d19d32f9558888ed29/cpu.cfs_quota_us
  
  50000
  
  [root@app51 docker]# cat www.xycheng178.com e9432a513e4bed0a744a29a8eaba2b27d9e40efabfe479d19d32f9558888ed29/tasks
  
  10561
  
  10598
  
  从上面结果我们能看出,docker run的启动限制参数值,被注入到了Cgroups的cpu控制组的对应配置文件中了。同时还有看到有两个进程同时被限制了,这是因为我们启动的nginx,nginx的主进程会启动多个子进程,使用ps -ef可以查看:
  
  [root@app51 docker]# ps -ef |grep 10561
  
  root 10561 10544 0 16:32 ? 00:00:00 nginx: master process nginx -g daemon off;
  
  101 10598 10561 0 16:32 ? 00:00:00 nginx: worker process
  
  root 10614 10179 0 16:38 pts/2 00:00:00 grep --color=auto 10561
  
  [root@app51 docker]#
  
  不难看到,其中主进程为10561(nginx master),子进程为10598(nginx worker)。以上则是docker的资源限制原理。Docker对资源限制主要是CPU和内存,其中还有很多参数可以使用,以下将会介绍docker中CPU和MEMERY限制参数。
  
  三、CPU限制参数
  
  默认情况下,容器的资源是不受限制的,宿主机提供多少资源,容器就可以使用多少资源,如果不对容器做资源限制,很有可能一个或几个容器把宿主机的资源耗尽,而导致应用或者服务不可用。所以对容器资源的限制显得非常重要,而docker主要提供两种类别的资源限制:CPU和内存,通过docker run 时指定参数实现。cpu限制资源限制有多种维度,以下将详细介绍。
  
  限制cpu配额
  
  参数通过--cpu-period=<value>和--cpu-quota=<value>共同起作用,即介绍上述Cgroups使用的例子。表示在cpu-period时间(默认100ms)内,可用的cpu配额。
  
  示例:
  
  docker run -d --cpu-period=100000 --cpu-quota=250000 --name test-c1 nginx:latest
  
  限制cpu可用数量
  
  参数通过--cpus=<value>指定,意思限制可用cpu个数,列如--cpus=2.5表示该容器可使用的cpu个数最多是2.5个,这相当与设置了--cpu-period=100000和 --cpu-quota=250000该指令在docker版本1.13以及以上使用。
  
  示例:
  
  [root@app51 ~]# docker run -d --cpus=2 --name test-c2 nginx:latest
  
  5347269d0974e37af843b303124d8799c6f4336a14f61334d21ce9356b1535bc
  
  使用固定的cpu
  
  通过--cpuset-cpus参数指定,表示指定容器运行在某个或某些个固定的cpu上,多个cpu使用逗号隔开。例如四个cpu,0代表第一个cpu,--cpuset-cpus=1,3代表该容器只能运行在第二个或第四个cpu上。查看cpu可以通过cat /proc/cpuinfo查看。
  
  示例:
  
  [root@app51 ~]# docker run -d --cpuset-cpus=1,3 --name test-c3 nginx:latest
  
  276056fce04982c2de7969ca309560ce60b0ebf960cf7197808616d65aa112d4
  
  设置CPU比例(权重)
  
  通过参数--cpu-shares指定,值为大于或小于1024的整数(默认1024),代表当主机cpu资源使用紧张时,每个容器所使用的cpu资源的比例(权重)。当有足够的CPU资源时,所有容器都会根据需要使用尽可能多的CPU。当第一个容器设置该参数的值为2048,第二个容器设置该参数的值为4096,那么当cpu资源不够用时候,两个容器cpu资源使用比例为1:2,
  
  示例:
  
  [root@app51 ~]# docker run -d --cpu-shares=2048 --name test-c4 nginx:latest
  
  578506d61324b38d7a01bf1d2ec87cb5d1ab50276ef6f7b28858f2d2e78b2860
  
  [root@app51 ~]# docker run -d --cpu-shares=4096 --name test-c5 nginx:latest
  
  d56a90bf080b70d11d112468348874e48fe4a78d09d98813a0377b34fa382924
  
  四、 MEMORY限制参数
  
  内存是一种不可压缩资源,一旦某个进程或者容器中应用内存不足就会引起OOM异常(Out Of Memory Exception),这将导致应用不可用,并且在Linux主机上,如果内核检测到没有足够的内存来执行重要的系统功能,系统会按照一定优先级杀死进程来释放系统内存。docker对内存的限制分为swap限制和物理内存限制,单位可以使用b,k, m,g。
  
  限制最大物理内存使用
  
  通过-m或者—memory指定,是硬限制,如果设置此选项,则允许设置的最小值为4m,该参数是最常用参数。
  
  示例:
  
  [root@app51 ~]# docker run -d --memory=512m --name mem-c1 nginx:latest
  
  67b0cb645c401bc6df3235d27d629185870716351396c71dfa3877abbbd377c8
  
  限制swap使用
  
  通过--memory-swap参数指定,不过此参数设置时候,情况比较较多。当容器中的物理内存使用不足时候,swap才会被允许使用,所以当--memory参数设置时候,此参数才会有意义:
  
  --memory-swap 设置为正整数,那么这两个--memory和 --memory-swap 必须设置。--memory-swap 表示可以使用的memory 和 swap,并且--memory控制非交换内存(物理内存)使用的量。列如--memory=300m 和--memory-swap=1g,容器可以使用300m的内存和700m(1g - 300m)swap。
  
  --memory-swap 设置为0,则忽略该设置,并将该值视为未设置。
  
  --memory-swap 设置为与值相同的值--memory,并且--memory设置为正整数,则容器不能使用swap,可以通过此方法限制容器不使用swap。
  
  --memory-swap 未设置并--memory 设置,则容器可以使用两倍于--memory设置的swap,主机容器需要配置有swap。例如,如果设置--memory="300m" 和--memory-swap 未设置,容器可以使用300m的内存和600m的swap。
  
  --memory-swap 设置为-1,则允许容器使用无限制swap,最多可达宿主机系统上可用的数量。
  
  示例:
  
  [root@app51 ~]# docker run -d --memory=512m --memory-swap=512m --name mem-c2 nginx:latest
  
  6b52c015a53be2c3e0e509eea918125a760c1c14df4cc977f05b5b31b83161d5
  
  其他
  
  --oom-kill-disable :默认情况下,如果发生内存不足(OOM)错误,内核会终止容器中的进程,如要更改此行为,使用该--oom-kill-disable选项,但是该选项有个前提就是-m选项必须设置。
  
  --memory-swappiness:默认情况下,容器的内核可以交换出一定比例的匿名页。--memory-swappiness就是用来设置这个比例的。--memory-swappiness可以设置为从 0 到 100。0 表示关闭匿名页面交换。100 表示所有的匿名页都可以交换。默认情况下,如果不适用--memory-swappiness,则该值从父进程继承而来。
  
  --memory-reservation:Memory reservation 是一种软性限制,用于限制物理内存的最大用值,它只是确保容器不会长时间占用超过--memory-reservation限制的内存大小。给--memory-reservation设置一个比-m小的值后,虽然容器最多可以使用-m使用的内存大小,但在宿主机内存资源紧张时,在系统的下次内存回收时,系统会回收容器的部分内存页,强迫容器的内存占用回到--memory-reservation设置的值大小。

上一篇:java基础-day18


下一篇:codevs 2822爱在心中