用python写爬虫

Python提供了许多Module,通过这些Module,可以很简单的做一些工作。比如,要获得cloga这个词在百度搜索结果页中的排名结果(排名结果+URL),这就是一个很简单的爬虫需求。

首先,要通过urllib2这个Module获得对应的HTML源码。

import urllib2
url='http://www.baidu.com/s?wd=cloga'
content=urllib2.urlopen(url).read()

通过上面这三句就可以将URL的源码存在content变量中,其类型为字符型。

接下来是要从这堆HTML源码中提取我们需要的内容。用Chrome查看一下对应的内容的代码(也可以用Firefox的Firebug)。

可以看到url的信息存储在span标签中,要获取其中的信息可以用正则式。

import re
urls_pat=re.compile(r'<span class="g">(.*?)</span>')
siteUrls=re.findall(results_pat,content)

re.compile是将字符串编译为用于python正则式的模式,字符前的r表示是纯字符,这样就不需要对元字符进行两次转义。re.findall返回的是字符串中符合results_pat的列表,由于在results_pat中使用了子表达式,所以results存储的就是子表达式所匹配的内容,即<span>与</span>之间的内容。

用正则式获得内容还需要进一步处理,因为其中包含html标签。类似,hi.baidu.com/<b>cloga</b> 2010-8-29或者<span> hi.baidu.com/<b>cloga</b> 2010-8-29 </span>,同样可以用正则式的sub方法替换掉这些标签。

strip_tag_pat=re.compile(r'<.*?>')
file=open('results000.csv','w')
for i in results:
    i0=re.sub(strip_tag_pat,'',i)
    i0=i0.strip()
    i1=i0.split(' ')
    date=i1[-1]
    siteUrl=''.join(i1[:-1])
    rank+=1
    file.write(date+','+siteUrl+','+str(rank)+'\n')

file.close()

完整代码如下:

#!/usr/bin/python

import urllib2
url='http://www.baidu.com/s?wd=cloga'
content=urllib2.urlopen(url).read()
import re
urls_pat=re.compile(r'<span class="g">(.*?)</span>')
siteUrls=re.findall(urls_pat,content)
strip_tag_pat=re.compile(r'<.*?>')
file=open('results000.csv','w')
rank=0
for i in siteUrls:
  i0=re.sub(strip_tag_pat,'',i)
  i0=i0.strip()
  i1=i0.split()
  date=i1[-1]
  siteUrl=''.join(i1[:-1])
  rank+=1
  file.write(date+','+siteUrl+','+str(rank)+'\n')
file.close()

再来就是把对应的结果输出到文件中,比如,排名、URL、收入日期这样的形式。OK,这样就用Python实现了一个简单的爬虫需求。秀一下上面代码的输出。

2013-7-1,www.cloga.info/,1
2013-6-19,www.zhihu.com/people/cloga,2
2013-6-12,www.cloga.info/ga_javascript/,3
2013-6-7,www.douban.com/people/cloga/,4
2013-6-11,dict.youdao.com/eng/cloga/,5
2013-6-1,cloga.com/,6
2013-6-12,www.cloga.info/tag/web-metrics...,7
2013-6-3,book.douban.com/people/47082939/coll...,8
2013-6-19,space.chinaz.com/Cloga,9
2013-4-24,website.informer.com/cloga.info,10



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值