爬虫概述
爬虫案例
案例1:爬取百度贴吧数据
分析:GET方式爬取数据
抓包:
设计:
实现:
案例2:抓妹子图
分析:GET方式爬取Ajax 数据
抓包:
设计:
实现:
案例3:爬取豆瓣电影数据
分析:POST方式爬取Ajax数据
抓包:
设计:
实现:
抓QQ空间数据
分析:登陆才能访问
抓包:
设计:
实现:
任务:总结!!
爬虫进阶 + 正则
目标
掌握自定义数据请求方式的开发步骤
掌握自定义数据请求方式----代理请求
了解自定义密码管理处理方式
掌握自定义cookie管理处理方式
常规数据爬取方式
数据get请求方式
Ajax 数据 get 请求方式
Ajax数据post请求方式
Cookie模拟账号登陆方式请求受限数据
核心:代码的设计开发(数据封装和请求头设置)
常规数据请求方式(掌握)
urllib2.urlopen(url, data, headers)
自定义数据请求方式(掌握)
headler = urllib2.HTTP/HTTPSHandler()
opener = urllib2.build_handler(handler)
opener.open(request)
自定义代理请求方式(掌握)
urllib2.ProxyHandler({
"http":"ip:port"
})
urllib2.ProxyHandler({
"http":"user:pass@ip:port"
})
密码管理器(了解)
HttpPassWordMgrWithDefaultRealm()
1. ProxyBasicAuthHandler() #授权代理处理器
2. HttpBasicAuthHandler() #验证web客户端授权处理器
Cookie 模拟登陆
cookie = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcess(cookie)
加载全局opener(掌握)
urllib2.install_opener(opener)
urllib2.urlopen(..)
任务:
总结自定义处理器的几种操作方式和应用场景
查找目标URL进行数据的爬取练习
6爬虫高级 ----Scrapy入门
目标
- 爬虫概述:
- Scrapy概述:
- 入门程序:
关于爬虫
- 有数据的地方,就会有爬虫,有爬虫的地方就会有反爬虫
- 尽量减少请求次数
- 爬虫的战场,不止在web,在一切需要网络数据的地方
- 常规数据反爬虫操作,止步于IP
- 在有性能的要求下,尽量使用多线程或者框架完成爬虫程序
scrapy 概述
- 纯Python开发实现的一个爬虫框架
- 包含爬取数据、提取结构性数据、应用框架
- 底层通过Twisted异步网络框架处理网络通讯
- 可扩展、高性能、多线程、分布式爬虫框架
Scrapy体系结构
- Scrapy Engine(引擎组件):
负责Spider、ItemPipeline、Downloader、Scheduler的工作调度、信息通讯、数据传递等工作
- Scheduler(调度组件):
负责接收引擎传递过来的请求,按照具体规则添加队列处理,最终返回给引擎
- Downloader(下载组件):
负责下载引擎传递过来的所有Request请求,最终服务器的响应数据返回给引擎组件
- Spider(爬虫):
处理所有Response响应,分析提取Item数据
如果数据中有二次请求,继续交给引擎组件
- ItemPipeline(管道):
负责[分析、过滤、存储]处理由Spiders获取到的Item数据
Scrapy安装
- Windows
pip install scrapy - ubuntu
apt-get install python-dev python-pip libxml12-dev libxstl1-dev
zlig1g-dev libssl-dev
pip install scrapy - mac os
官方:建议不要使用自带的Python环境
安装:参考官方文档
Scrapy 爬虫项目的创建
scrapy startproject <spider_name>
scrapy 项目结构
|-- tutorial/ # 项目文件夹
|-- scrapy.cfg # 项目发布配置
|-- tutorial/ # 项目模块
|-- __init__.py # 模块描述文件
|-- items.py # 项目item数据定义文件
|-- pipelines.py # 项目pipelines定义文件
|--settings.py # 项目全局配置
|-- spiders/ # 爬虫模块<开发>
|-- __init__.py # 模块描述文件
scrapy 创建爬虫
scrapy genspider example example.com
scrapy 爬虫手工开发
scrapy 创建项目
scrapy startproject qikuspider
scrapy 封装item数据
/qikuspider/item.py
class Qikuspider(scrapy.Item):
name = scrapy.Field()
intro = scrapy.Field()
scrapy 创建爬虫处理类
/qikuspider/spider/QikuSpider.py
class QikuSpider(scrapy.Spider):
name = "qikuspider"
allow_domains = "http://www.qikuedu.com"
start_urls = (http://www.qikuedu.com/#,)
def parse(self, response):
print(response.body)
启动爬虫
scrapy crawl qikuspider
关于那个错误
错误:no module named win32api
描述:python无法访问windows系统api错误
解决方案:安装win32
下载地址:
https://sourceforge.net/projects/pywin32/files/pywin32/?SetFreedomCookie
Item 数据封装
/qikuspider/spider/QikuSpider.py
from qikuspider.items import QikuspiderItem
def parse(self, response):
t_l = response.xpath(..)
''
t_items = {}
item = QikuspiderItem()
''
return t_items
pycharm 中运行scrapy爬虫
- 程序启动脚本
关于scrapy.cmdline
执行命令 cmdline.execute("command".split())
任务
- 爬取百思不得姐 图片
- 爬取糗事百科 段子
- 爬取起点中文网 小说
- 爬取智联招聘Python相关职位(单页)
7爬虫高级 ---- Scrapy.Spider
目标
- Scrapy Shell 的使用
- Ubuntu 下爬虫开发
- 深度爬虫:CrawlSpider
scrapy 核心处理 - scrapy.Item
- scrapy.Spider
- yield
- scrapy.Request(url, callback=...)
Spider - 爬虫基础类:所有的爬虫程序必须继承这个类
- 核心处理:定义爬取网页的动作及结构化数据提取的操作
- 源码分析
Scrapy shell - 爬虫测试专用命令行
- 语法:scrapy shell "target_url"
- 返回数据:response
- 操作数据:response.body 等
response数据筛选 - xpath(): 通过传入的xpath表达式筛选数据
- extract():序列化节点列表,返回Unicode字符串
- css(): 通过传入的css选择器筛选数据
- re(): 通过传入的正则表达式股则筛选数据
Ubuntu下爬虫程序的开发 - Python版本切换
- scrapy 的安装
- 创建爬虫程序:爬取中华英才网招聘信息
深度爬虫:CrawlSpider - scrapy.spiders.CrawlSpider
- 创建项目:scrapy startproject <project_name>
- 创建爬虫:scrapy genspider -t crawl <spider_name><domains>
- 核心处理规则:from scrapy.spider import CrawlSpider,Rule
- 核心处理提取:from scrapy.linkextractors import LinkExtrator
链接提取:LinkExtractor
class scrapy.contrib.linkextractor.sgml.SgmlLinkExtractor(
allow = (), # 符合正则表达式参数的数据会被提取
deny = (), # 符合正则表达式参数的数据禁止提取
allow_domains = (), # 包含的域名中可以提取数据
deny_domains = (), # 包含的域名中禁止提取数据
deny_extensions = (),
restrict_xpath = (), # 使用xpath提取数据,和allow共同起作用
tags = (), # 根据标签名称提取数据
attrs = (), # 根据标签属性提取数据
canonicalize = (),
unique = True, # 剔除重复链接请求
process_value = None
)
爬取规则:rules
rules = [
Rule(
link_extractor, # LinkExtractor对象
callback=None, # 请求到响应数据时的回调函数
cb_kwargs=None, # 调用函数设置的参数
follow=None, # 是否从response跟进链接:不要指定为parse
process_links=None, # 过滤linkextractor列表,每次获取列表时都会调用
process_request=None # 过滤request,每次提取request都会调用
)
]
深度爬虫:案例开发
爬取中华英才网Python所有岗位信息
章节任务
- Ubuntu环境下爬取智联招聘Python相关职位(多页)
- Ubuntu环境下爬取中华英才网