基础知识
爬虫去重
1. 存储到数据库中 存取速度慢 2. 存储到内存中的集合里,内存占用十分大 当爬取数据有1亿条时 1*10**8*2Byte*50str_len/1024/1024/1024 = 9 结果显示仅仅爬取1亿条url数据就占用了9个G的内存,显然是不合适的 3. 将url经过md5等哈希方法存储在集合中 一般一个md5占用128位,16Byte,结果大约为1.5G与上种方法相比,大大减少了内存占用 4. 使用bitmap位图法 将url经过哈希后的md5值通过hash函数映射到某一位上 一个url占据一位,同样的一个亿的数据,内存大约占据12M的内存大小。相比与hash方法又占用的内存又小了几个数量级 这种方法带来的冲突会导致,再寻址 虽然极大降低了内存占用,但是牺牲了运行时间 5. bloomfilter方法 对bitmap优化后的方法,减少了hash冲突的可能性
Scrapy入门
介绍
Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。
github项目
https://github.com/scrapy/scrapy
新建scrapy工程
# 在虚拟环境中,workon <yourvenvname> scrapy startproject TestSpider cd TestSpider scrapy genspider example example.com
简单运行一下工程
# 创建一个main.py文件 from scrapy.cmdline import execute import sys import os sys.path.append(os.path.dirname(os.path.abspath(__file__))) execute(["scrapy", "crawl", "jobbole"]) # 在虚拟环境中执行 scrapy crawl jobbole # 或者直接运行我们的main.py文件 *** # 提示缺少模块 pip install pypiwin32 # 配置settings,不遵循OBEY协议 ROBOTSTXT_OBEY = False # 快速调试工程,一次请求,多次测试 scrapy shell <url_path>