第四课-多线程与多进程爬虫_第1页
第四课-多线程与多进程爬虫_第2页
第四课-多线程与多进程爬虫_第3页
第四课-多线程与多进程爬虫_第4页
第四课-多线程与多进程爬虫_第5页
免费预览已结束,剩余33页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

法律

本课件包括:演示文稿,示例,代码,题库,和声音等,小象学院拥有完全知识的权利;只限于善意学习者在本课程使用,不得在课程范围外向任何第散播。任何其他人或机构不得盗版、创意, 保留一切通过法律、仿造其中的者的权利。

课程咨询:小象:ChinaHadoop互联网新技术教育领航者分布式爬虫互联网新技术教育领航者大纲表单及登录多线程及语言分析对比多进程爬虫互联网新技术教育领航者表单及登录互联网新技术教育领航者HTML

提交数据form

表单<form><input

type="text"name=”username"></form>,由浏览器实现POST方法HTML

的ajax

请求$.(ajax){}基于ajax技术,异步发送http请求并获得返回数据,然后利用JavaScript对网页进行处理互联网新技术教育领航者HTML

表单<form></form>

tag

包围里面包含了表单的元素:<select><textarea><input>等输入框<input>type

包含了多种输入类型,例如:<input

type=“text”name=“name”>文本输入框<input

type=“password”

name=“password”><input

type=“submit”value=“Submit”>提交按钮互联网新技术教育领航者表单类型:form-dataPOST

/start.htm

HTTP/1.1Host:

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language:

,en-US;q=0.8,en;q=0.6Content-Type:

multipart/form-data;

boundary=----WebKitFormBoundary7MA4YWxkTrZu0gWCache-Control:

no-cache-WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition:

form-data;

name="name”chacha-WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition:

form-data;

name="password”chinahadoop-WebKitFormBoundary7MA4YWxkTrZu0gW--互联网新技术教育领航者表单类型form-datahttp请求中的multipart/form-data,它会将表单的数据处理为一条消息,以

为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型。由于有boundary,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。x-www-form-urlencodedapplication/x-www-from-urlencoded,会将表单内的数据转换为键值对互联网新技术教育领航者表单类型:form-dataPOST

/start.htm

HTTP/1.1Host:

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Accept-Language:

,en-US;q=0.8,en;q=0.6Content-Type:

multipart/form-data;

boundary=----WebKitFormBoundary7MA4YWxkTrZu0gWCache-Control:

no-cache-WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition:

form-data;

name="name”chacha-WebKitFormBoundary7MA4YWxkTrZu0gWContent-Disposition:

form-data;

name="password”chinahadoop-WebKitFormBoundary7MA4YWxkTrZu0gW--互联网新技术教育领航者表单类型:x-www-form-urlencodedPOST

/start.htm

HTTP/1.1Host:

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'content-type':

"application/x-www-form-urlencoded",Cache-Control:

no-cachename=chachsword=chinahadoop互联网新技术教育领航者ajax

登录POST

/start.htm

HTTP/1.1Host:

Accept:

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8Cache-Control:

no-cache{"name":"chacha",

"password":"chinahadoop"}一般以json

的方式提交数据互联网新技术教育领航者登录根据chrome

inspector

里检查到的参数,来设置登录方式最常用的是x-www-form-urlencoded

和json方式,两种方式只是body编码不同如果是form-data,按照form-data的方式组合bodybody

部分经常需要按照特定的方式编码,比如base64,或者md5对于非常复杂的登录协议,利用第5章的

页方式登录request

=

urllib2.Request(url,

data,

headers

=

loginheaders

)url

是 的地址data

是body

部分headers=loginheaders

是HTTP请求的HEADER

数据互联网新技术教育领航者表单登录import

urllib2url

=headers

=

{'host':

"jc.lo",'connection':

"keep-alive",'cache-control':

"no-cache",'content-type':

"application/x-www-form-urlencoded",'upgrade-insecure-requests':

"1",'accept-language':

"

,en-US;q=0.8,en;q=0.6",}data

=

{'name':'caca',

"password":'c'}payload

=

urllib.urlencode(data)request

=

urllib2.Request(url,

payload

,

headers=headers)response

=

urllib2.urlopen(request)互联网新技术教育领航者获取并设置登录的是为了获得登录成功后,HEADER

会有设置的相关信息Set-Set-Set-:main[UTMPKEY]=1381959;

path=/;:main[UTMPNUM]=14820;

path=/;:main[UTMPUSERID]=abc;

path=/;=.=.=.此时我们需要把服务器返回的的

里信息,写入到我们后续请求的HEADER互联网新技术教育领航者意外??当遇到网页登录后,返回302跳转的情况下,urllib2

的Response

会丢失Set-

的信息,导致登录不成功更通常的情况下,我们需要一个通用的能处理的工具请求自动处理Set-自动处理管理过期自动在对应的域下发送特殊互联网新技术教育领航者使用urllib2

的插件功能urllib2

可以绑定一系列的处理对象handler,hanlder

可以对urllib2

的http请求提供额外的功能支持。handler是以绑定的顺序依次调用的。例如

HTTPRedirectHandler

用来处理跳转的情况,ProxyHandler

用于处理。可以开发自定义的handler

(从BaseHandler继承)build_opener([handler,...])#

一系列的handlerproxy_handler

=

urllib2.ProxyHandler({'http':

'http

:3128/'})proxy_auth_handler

=

urllib2.ProxyBasicAuthHandler()proxy_auth_handler.add_password('realm',

'host',

'username',

'password')opener

=

urllib2.build_opener(proxy_handler,proxy_auth_handler)#

This

time,

rather

than

install

the

OpenerDirector,

we

use

it

directly:opener.open('http

/login.html')互联网新技术教育领航者Jarimportlibcj

=

lib. Jar()

#创建

Jar

对象opener=urllib2.build_opener(urllib2.HTTP Processor(cj))#

插件request

=

urllib2.Request(url,

payload,headers=headers)response

=

opener.open(request)print

response.items()#打印headers信息print

response.read()#打印返回的网页#打印forprint内容in

cj:.name,.value,.互联网新技术教育领航者多线程爬虫互联网新技术教育领航者多线程互联网新技术教育领航者多线程的复杂性资源、数据的安全性:锁保护原子性:数据操作是天然互斥的同步等待:wait()notify()notifyAll()死锁:多个线程对资源互锁,造成死锁容灾:任何线程出现错误,整个进程都会停止互联网新技术教育领航者多线程的优势内存空间共享,信息效率高提高CPU的使用效率开发便捷轻,创建、销毁的开销小互联网新技术教育领航者Python

线程支持多线程(Javascript

PHP不支持多线程)python

线程直接 到

native

线程

(Java

1.4

Java线程是JVM实现的,共同运行在一个native

thread)GIL

(Global

Interpretor

Lock):对于多核的利用能力有限互联网新技术教育领航者实现一个多线程爬虫创建一个线程池threads=[]确认url

队列线程安全Queue

Deque从队列取出url,分配一个线程开始爬取pop()/get()threading.Thread如果线程

了,循环等待,直到有线程结束

t.is_alive()从线程池移除已经完成

的线程

threads.remove(t)如果当前级别的url已经遍历完成,t.join()函数等待所有现场结束,然后开始下一级别的爬取互联网新技术教育领航者多线程爬虫评价优势:的速有效利用CPU时间极大减小 出错、阻塞对抓取速度的影响,整体上提高对于没有反爬虫限制的

速度可以多倍增加局限性:对于有反爬的

,速度提升有限提高了复杂度,对编码要求更高线程越多,每个线程获得的时间就越少,同时线程切换更频繁也带来额外开销线程之间资源竞争更激烈互联网新技术教育领航者多进程爬虫互联网新技术教育领航者线程与进程互联网新技术教育领航者线程与进程互联网新技术教育领航者多进程爬虫评估目的:控制线程数量对线程进行

,减少资源竞争某些环境下,在单机上利用多个IP来局限性:不能突破网络瓶颈单机单IP的情况下,变得没有意义的代价更大互联网新技术教育领航者进程间通信管道(PIPE)信号(Signal):复杂消息队列:Posix

及systemV共享内存:速度最快,需要结合信号量达到进程间同步及互斥信号量:用于数据同步Socket:可以标准化,可以用于多机互联网新技术教育领航者Android

进程间通信Binder互联网新技术教育领航者Android

进程间通信AIDL互联网新技术教育领航者创建多进程爬虫SolutionA–C/S模式一个服务进程,入队及出队URL,入队需检查是否已经目前的爬取状态、进度多个爬取进程,从服务进程获取URL,并将新的URL返回给服务进程使用Socket来做IPCSolutionB–数据库模式使用数据库来读写爬取列表多个爬取进程,URL

的获取与增加都通过数据库操互联网新技术教育领航者C/S

v.s.数据库CS

优势:运行速度快,添加、修改、查询都是内存的BIT位操作扩展方便,例如动态URL队列重拍数据库:开发便捷,数据库天生具备读写保护及支持IPC只需要写一个爬虫程序互联网新技术教育领航者创建MySQL

数据库表KeyTypeDescriptionindexint(11)PRIMARY

KEY

AUTOINCREMENTu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论