今天为大家整理了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设置的值大小。