网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
爬虫:
客户端:
Web应用本质
APP
服务器:
URL -> API
注:服务器提供API,URL有个专有名词叫API
自动程序(爬虫):
起始URL:
https://www.cnblogs.com/
下载源码:
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1"><meta charset="utf-8">
<title>博客园 - 开发者的网上家园</title>
<meta name="k
...
--- 获取关键字,收录到数据库 -
-- 再获取其他URL,href
再继续访问......
requests.post(...)
自动登录需要注意几点:
1、登录时提交用户信息
2、接收返回值或者cookie
3、携带cookie或者返回值,再去访问
自动登录网站的几种认证方式:
第一次获取cookie
登录:cookie授权
....
第一次访问:什么都不给
登录:登录成功后,再给字符串
python爬虫几个步骤:
1、发送请求
- 需要验证
- 无需验证
2、获取内容
正则表达式,分类+分组
//div[@class='item_list']
//div[@class='item_list']/div
//div[@class='item_list']//span
//div[@class='item_list']//a/text()
//div[@class='item_list']//img/@
3、获取其他URL
//a/@href
4、自动递归请求url,重复执行1、2、3步操作
##############scrapy##############
1、安装
依赖:Twisted
基于python2.7做
pip install scrapy
windows依赖模块:
pywin32
安装python2.7
python-2.7.11.msi
python-2.7.11.adm64.msi
==> 环境变量 C:\python27 C:\python27\Script
装pip
安装steuptools
https://bootstrap.pypa.io/ez_setup.py
ez_setup.py
python ez_setup.py
pip(下载pip源码进行解压安装)
https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
解压
进入模块
python setup.py install
pip install requests
pip install scrapy
scrapy需要装的一些依赖:
VCForPython27.msi
pywin32-220.win-amd64-py2.7.exe
pypiwin32-219.win32-py2.7.exe
lxml-2.3.win-amd64-py2.7.exe
lxml-2.3.win32-py2.7.exe
pip install scrapy
2、使用
环境变量:C :\python27\scrapy
scrapy startproject spiderl
创建spider文件(APP)
-name = ''nnnnn"
-start_urls
-parse
3、 scrapy crawl spider_name --nolog #nolog不要显示日志
**********************
scrapy
1、project
2、app,爬虫
- name
- start_urls
- parse
3、crawl name --nolog
4、parse
直接处理请求:
selector:
// #表示子子孙孙
/ #从孩子里找
//div[@class='c1'] #表示属性选择器
//div[@class='c1'][@id='i1'] #两个属性
//div//img/@src 获取img下的src属性
//div//a[1]
//div//a[1]//text() #找a标签里面内容
====支持正则表达式
//div/a
Requests
Python标准库中提供了:urllib、urllib2、httplib等模块以供Http请求,但是,它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。
import urllib2
import json
import cookielib def urllib2_request(url, method="GET", cookie="", headers={}, data=None):
"""
:param url: 要请求的url
:param cookie: 请求方式,GET、POST、DELETE、PUT..
:param cookie: 要传入的cookie,cookie= 'k1=v1;k1=v2'
:param headers: 发送数据时携带的请求头,headers = {'ContentType':'application/json; charset=UTF-8'}
:param data: 要发送的数据GET方式需要传入参数,data={'d1': 'v1'}
:return: 返回元祖,响应的字符串内容 和 cookiejar对象
对于cookiejar对象,可以使用for循环访问:
for item in cookiejar:
print item.name,item.value
"""
if data:
data = json.dumps(data) cookie_jar = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie_jar)
opener = urllib2.build_opener(handler)
opener.addheaders.append(['Cookie', 'k1=v1;k1=v2'])
request = urllib2.Request(url=url, data=data, headers=headers)
request.get_method = lambda: method response = opener.open(request)
origin = response.read() return origin, cookie_jar # GET
result = urllib2_request('http://127.0.0.1:8001/index/', method="GET") # POST
result = urllib2_request('http://127.0.0.1:8001/index/', method="POST", data= {'k1': 'v1'}) # PUT
result = urllib2_request('http://127.0.0.1:8001/index/', method="PUT", data= {'k1': 'v1'})
封装urllib请求
Requests 是使用 Apache2 Licensed 许可证的 基于Python开发的HTTP 库,其在Python内置模块的基础上进行了高度的封装,从而使得Pythoner进行网络请求时,变得美好了许多,使用Requests可以轻而易举的完成浏览器可有的任何操作。
Scrapy
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架(类似Django)。
其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的, 也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
Scrapy用途广泛,例如:
- 数据挖掘
- 信息处理
- 存储历史数据
- 监测
- 自动化测试
- ...
详细参考:http://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/overview.html
Scrapy 使用了 Twisted异步网络库来处理网络通讯。整体架构大致如下
Scrapy主要包括了以下组件:
-
引擎(Scrapy)
用来处理整个系统的数据流处理, 触发事务(框架核心) -
调度器(Scheduler)
用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回. 可以想像成一个URL(抓取网页的网址或者说是链接)的优先队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址 -
下载器(Downloader)
用于下载网页内容, 并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个高效的异步模型上的) -
爬虫(Spiders)
爬虫是主要干活的, 用于从特定的网页中提取自己需要的信息, 即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面 -
项目管道(Pipeline)
负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体、验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管道,并经过几个特定的次序处理数据。 -
下载器中间件(Downloader Middlewares)
位于Scrapy引擎和下载器之间的框架,主要是处理Scrapy引擎与下载器之间的请求及响应。 -
爬虫中间件(Spider Middlewares)
介于Scrapy引擎和爬虫之间的框架,主要工作是处理蜘蛛的响应输入和请求输出。 -
调度中间件(Scheduler Middewares)
介于Scrapy引擎和调度之间的中间件,从Scrapy引擎发送到调度的请求和响应。
Scrapy运行流程大概如下:
- 引擎从调度器中取出一个链接(URL)用于接下来的抓取
- 引擎把URL封装成一个请求(Request)传给下载器
- 下载器把资源下载下来,并封装成应答包(Response)
- 爬虫解析Response
- 解析出实体(Item),则交给实体管道进行进一步的处理
- 解析出的是链接(URL),则把URL交给调度器等待抓取
python爬虫链接详细参考:http://www.cnblogs.com/wupeiqi/articles/5354900.html
#################################################################
爬虫博客推荐(python2.7):http://www.cnblogs.com/xin-xin/p/4297852.html