python爬虫怎么做?

2018-7-12 17:51| 发布者: admin| 查看: 3| 评论: 0

摘要: 在互联网大数据时代,除了知名搜索引擎的爬虫外,互联网上还有大量的不知名、个人小爬虫在运行。这些爬虫通常使用暴力方式突破Web服务器的爬虫检测,导致了Web服务器和爬虫进入了一种恶战状态,最终爬虫要付出很大的 ...

在互联网大数据时代,除了知名搜索引擎的爬虫外,互联网上还有大量的不知名、个人小爬虫在运行。

这些爬虫通常使用暴力方式突破Web服务器的爬虫检测,导致了Web服务器和爬虫进入了一种恶战状态,最终爬虫要付出很大的代价才能抓取Web数据,这是损人害己。

做一只优雅的Python爬虫其实很简单,你只要了解Robots协议,在爬虫程序设计中遵守该协议的实现就可以。该协议具体体现就是Web服务器根目录下的robots.txt文件,里面规定了爬虫的访问许可、访问时段、访问频率等重要参量。这些约定是Web服务端设定,遵守这些约定的爬虫就是一个好爬虫。两者类似于甲方和乙方的关系。

可以使用python中的RobotFileParser类对robots.txt文件进行解析,并获得访问许可的判断,以下是对该类的说明。该类的主要方法有:

set_url(url),设置指向robots.txt的URL。

read(),读取robots.txt。

can_fetch(useragent, url),指定useragent及url,判断useragent的爬虫是否可以访问url,返回值为True表示可以访问,False表示不允许访问。

crawl_delay(useragent),返回指定useragent的爬虫,其抓取延时的值。如果robots.txt中没有为useragent指定相应的抓取延时,则返回None。

request_rate(useragent),返回指定useragent的爬虫,其抓取频率的值。如果robots.txt中没有为useragent指定相应的抓取频率,则返回None。

下面的例子则展示如何使用该类来设计一个友好爬虫。

首先从https://item.taobao.com/robots.txt看一下服务器的约定。

User-agent: baiduspider

Disallow: /

User-Agent: Googlebot

Allow: /item.htm

以下是python代码的实现,之所以是友好的,主要体现在if rp.can_fetch(useragent, url)这句上,实现有条件抓取,服务器允许的才抓取。当然完整的友好爬虫还需要实现访问时段、访问频率的约定。

import urllib.robotparser

import urllib.request

#读取robots.txt文件

rp = urllib.robotparser.RobotFileParser()

rp.set_url("https://item.taobao.com/robots.txt")

rp.read()

#模拟Baiduspider或Googlebot,仅仅只是为了验证robotparser才这样设置。

#冒充知名爬虫的User-agent是不适合的。

useragent='Baiduspider'

url='http://www.tanxingcai.com'

if rp.can_fetch(useragent, url):

data=file.read() #读取全部

fb=open("bd-html","wb") #将爬取的网页保存在本地

fb.write(data)

fb.close()

可以看到useragent='Baiduspider'时,该爬虫不会抓取数据。而设置为Googlebot则可以抓取数据。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

发表评论

最新评论

Archiver|手机版|小黑屋|谭兴才自媒体

GMT+8, 2018-7-13 15:05 , Processed in 0.129087 second(s), 25 queries .

谭兴才 ©版权所有

© 2018 TanXingCai.com

返回顶部