环境
pip --trusted-host pypi.python.org install virtualenv
pip install -i https://pypi.douban.com/simple/ django
新建虚拟环境
virtualenv scrapytest
cd scripts
activate.bat
deactivate.bat
virtualenv -p python3地址 scrapypy3
apt-get install python-virtualenv
启动
source activate
pip install virtualenvwrapper
find / -name virtualenvwrapper.sh
vim ~/.bashrc
source ~/.bashrc
修改路径
export WORKON_HOME=$HOME/.virtualenvs
windows
pip install virtualenvwrapper-win
workon
workon 虚拟环境
mkvirtualenv 虚拟环境名 默认保存在C盘
更换位置
Path
WORKON_HOME 地址(Evns)
把C盘文件拷贝过来
退出deactivate
在项目中
pip install requests
pip install scrapy 报错
缺少依赖库libxml2
www.lfd.uci.edu/~gohlke/pythonlibs
lxml 下载
workon 虚拟环境
pip install 文件名
pip install scrapy
python3
mkvirtualenv --python=py3路径 py3scrapy
技术选型
- twisted 异步IO,BSoup是纯python型框架,xpath是c编写的
正则
- ^后一个字符做为开头
- . 任意字符
- 0-n个字符
- $ 前一个字符做为结尾
- ? 非贪婪匹配,匹配后一个字符,从左边开始匹配(贪婪匹配就是反向匹配,从右边开始)
- 前面字符最少出现一次
- {2} {2,} {2,5} 出现两次,出现最少两次,出现2到5次
- | 或,左边的优先
- () 提取子字符串
- [] 其中字符只要满足一个就行
- [^] 非
[.] [*] 没有任何特殊含义
- [a-z] a到z的任意字母
- \s 空格(一个字符)
- \S 不为空格(一个字符)
- \w [A-Za-z0-9_]
- \W 上面相反
- [\u4E00-\u9FA5] 所有中文
- \d 数字
__author__ == 'hanxiao'
line = 'b0000000b123'
regex_str = "^b.*"
if re.match(regex_str,line)
字符串编码
在编程中,unicode比utf-8更简单,而utf-8在内存中就更复杂
爬虫去重策略
字符MD5编码,100Byte压缩到16个Byte(128个bit),而且不重复
4.中八个位置为一byte.缺点,hash冲突很大,大概12MB
P.S.
bit,位 :二进制数系统中,每个0或1就是一个位(bit),是存储信息的最小单位。
Byte,字节 :字节是由8个位所组成,可存储一个字符:字母(AZ)、数字(09)、或符号(,.?!%&±*/)、以及一些控制信息等。
1 Byte = 8 bit
通常用大写B表示byte即字节,用小写b表示bit即位,一个字节=八个位,即1B=8b。
爬
- 目标
- 二级域名下所用内容
- 深度优先和广度优先遍历
- 利用页面中的“所有文章“
- 利用最后的页码
- 利用下一页的超链接
xpath
scrapy shell http://blog.hx.com/110287/
title= reponse.xpath("//div[@class='entry-header']/h1/text()")
title.etract()[0] 取数组第一位,如果为空,抛异常,优化
tite.etract_first("") 无报错
strip() 去掉空格
replace(".","")
css选择器
scrapy突破反爬虫限制
模拟登录
- selenium
- chromedriver
- 防止识别,去掉js便量
- chrome.exe --remote-debugger-port=9222 ,其他chrome关闭
- 防止识别,去掉js便量
- mouse
- 屏幕坐标获取工具
- ifu python第三方包
- chromedriver
反爬
- user-agent
- ip访问频率限制
- 必须登录(账号访问频率)
- 动态网页
- 前端js逻辑加密和混淆
- 机器学习分析爬虫行为
- 只请求html
- css代码下毒
- referer
fake user-agent
#禁止Scrapy等工具的抓取
if($http_ user agent ~*(ScrapylCurllHttpClientlpython)){ return 403;
#禁止非GET|HEADIPOST方式的抓取
if($request method !~^(GETIHEADIPOST)$){ return 403;
command
- scrapy genspider url
- scrapy shell -s USER_AGENT=’’
- xpath可以使用或者
- scrapy genspider -t crawl url
- scrapy 信号量
- phantomjs, 无界面的浏览器, 多进程情况下phantomjs性能会下降很严重,因为是同步,不过可以重写downloader来实现异步
browser = webdriver.PhantomJS(executable_path="E:/home/phantomjs-2.1.1-windows/bin/phantomjs.exe")
- pyvirtualdisplay
- selenium 驱动浏览器需要打开浏览器,而浏览器需要图形化界面。如果你在 liunx 服务器上直接运行肯定会报错,所以可以使用 pyvirtualdisplay 虚拟一个显示器
- scrapy暂停与重启
- 暂停信号是ctrl c ,不是kill
- scrapy crawl lagou -s JOBDI=path
- seen 已经访问过的url
- 去重方法 request_seen->request_fingerprint(sha1)
- 部署
- scrapyd-client
- scrayd-deploy -l 列出要部署的目标地址
- scrapyd-client
热门评论
好东西,插一个眼