手记

聊聊爬虫

环境

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关闭
    • mouse
      • 屏幕坐标获取工具
      • ifu python第三方包

反爬

  • 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 列出要部署的目标地址
4人推荐
随时随地看视频
慕课网APP

热门评论

好东西,插一个眼

查看全部评论