您的位置
主页 > 国内新闻 » 正文

Python爬虫:一些常用的爬虫技巧总结 附免费资料

来源:www.91gps.cn 点击:1934

python已有近2000年的历史。 python应用程序最流行的场景是Web快速开发,爬行以及自动化操作和维护:编写简单的网站,编写自动发布脚本,编写和发送电子邮件脚本,以及编写简单的验证代码识别脚本。

爬行动物在开发过程中也有很多重用过程。这是一个总结,将来可以保存一些东西。

1.基本抓取页面

获取方法

导入urllib2

Url=''

Response=urllib2.urlopen(url)

打印response.read()

发布方法

导入urllib

导入urllib2

Url=''

Form={'name':'abc','password':'1234'}

Form_data=urllib.urlencode(form)

Request=urllib2.Request(url,form_data)

Response=urllib2.urlopen(request)

打印response.read()

2,使用代理IP

在开发爬行动物的过程中,IP经常被阻止,并且需要代理IP;

urllib2包中有一个ProxyHandler类,您可以通过该类设置代理以访问该网页,如以下代码段所示:

导入urllib2

Proxy=urllib2.ProxyHandler({'http':'127.0.0.1: 8087'})

Opener=urllib2.build_opener(proxy)

Urllib2.install_opener(开启器)

Response=urllib2.urlopen('')

打印response.read()

3. Cookie处理

Cookie是一些网站存储在用户本地终端上的数据(通常是加密的),用于识别用户的身份并执行会话跟踪。 Python提供了一个用于处理cookie的cookielib模块。 cookielib模块的主要功能是提供可以存储cookie的对象。为了与urllib2模块一起使用来访问Internet资源。

代码段:

导入urllib2,cookielib

Cookie_support=urllib2.HTTPCookieProcessor(cookielib.CookieJar())

Opener=urllib2。 build_opener(cookie_support)

urllib2的。 install_opener(opener)

Content=urllib2。 urlopen('')。读()

关键是CookieJar(),它管理HTTP cookie值,存储由HTTP请求生成的cookie,并将cookie对象添加到传出的HTTP请求中。整个cookie存储在内存中,在垃圾收集CookieJar实例后,cookie也将丢失,并且所有进程都不需要单独操作。

4.伪装成浏览器

有些网站对抓取工具的访问感到厌恶,因此拒绝对抓取工具发出的所有请求。因此,使用urllib2直接访问网站通常会导致HTTP错误403:禁止

特别注意一些标题。服务器将检查这些标题。

1.用户代理服务器或代理检查该值以确定它是否是浏览器发起的请求;

2.当Content-Type使用REST接口时,服务器会检查该值以确定应如何解析HTTP正文中的内容。

这可以通过修改HTTP包中的标头来实现。代码段如下:

导入urllib2

集管={

'User-Agent':'Mozilla/5.0(Windows; U; Windows NT 6.1; en-US; rv: 1.9.1.6)Gecko/ Firefox/3.5.6'

}

Request=urllib2.Request(

Url='',

标题=标题

打印urllib2.urlopen(请求).read()

5,页面分析

当然,最强大的页面解析是正则表达式。这对于不同网站的不同用户是不同的。你不需要太多解释。有几个很好的网址:

正则表达式入门:正则表达式在线测试: expression basis: COM /课程/90

第二个是解析库,有两个常用的lxml和BeautifulSoup,供这两个用于引入两个更好的站点:

Lxml:

对于这两个库,我的评价是它们都是HTML/XML处理库,Beautifulsoup纯python实现,效率低,但功能实用,如某个HTML节点的源代码可以通过结果搜索获得; lxmlC语言编码,高效且支持Xpath。

6.验证码的处理

对于一些简单的验证码,可以进行简单的识别。我只做了一些简单的验证码识别。然而,一些反人类验证码,例如,可以通过编码平台手动编码。当然,这是收费的。

7,gzip压缩

你有没有遇到过一些网页,无论如何转码,都是一团糟。哈哈,这意味着你不知道许多网络服务能够发送压缩数据,这可以减少60%以上的网络传输数据量。对于XML Web服务尤其如此,因为XML数据的压缩可能很高。

但是除非您告诉服务器您可以处理压缩数据,否则通用服务器不会为您发送压缩数据。

所以你需要像这样修改代码:

导入urllib2,httplib

Request=urllib2.Request('')

Request.add_header('Accept-encoding','gzip')1

Opener=urllib2.build_opener()

f=opener.open(请求)

这是创建Request对象的关键字:添加一个Accept-encoding标头告诉服务器你可以接受gzip压缩数据

然后解压缩数据:

导入StringIO

导入gzip

Compresseddata=f.read()

Compressedstream=StringIO.StringIO(compresseddata)

Gzipper=gzip.GzipFile(fileobj=compressedstream)

打印gzipper.read()

8,多线程并发抓取

如果单线程太慢,则需要多线程。这是一个简单的线程池模板。这个程序只打印1-10,但可以看出它是并发的。

虽然python的多线程非常无味,但它对爬行动物网络来说仍然具有一定的效率。

来自线程导入线程

从队列导入队列

从时间导入睡眠

#q是任务队列

#NUM是并发线程的总数

#JOBS有多少个任务?

Q=队列()

NUM=2

JOBS=10

#处理单个任务的特定处理功能

Def do_somthing_using(arguments):

打印参数

#这是工作流程,负责连续从队列中检索数据并对其进行处理。

Def working():

而真:

参数=Q. get()

Do_somthing_using(arguments)

睡觉(1)

问:task_done()

#forp NUM个线程等待队列

我在范围(NUM):

T=线程(目标=工作)

T. setDaemon(True)

T. start()

#Queue JOBS

对于我在范围(JOBS):

问:放(i)

#等待所有JOBS完成

问:加入()

随着人工智能的爆发,Python是最适合人工智能的编程语言。如果您想学习Python,我已经为您准备了免费材料:

我希望每个人都能支持它

http://www.sugys.com/bds63/29jD.html



最新要闻