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

用python写爬虫的更多相关文章

  1. python写爬虫时的编码问题解决方案

    在使用Python写爬虫的时候,常常会遇到各种令人抓狂的编码错误问题.下面给出一些简单的解决编码错误问题的思路,希望对大家有所帮助. 首先,打开你要爬取的网站,右击查看源码,查看它指定的编码是什么,如 ...

  2. 怎么用Python写爬虫抓取网页数据

    机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...

  3. Python写爬虫-爬甘农大学校新闻

    Python写网络爬虫(一) 关于Python: 学过C. 学过C++. 最后还是学Java来吃饭. 一直在Java的小世界里混迹. 有句话说: "Life is short, you ne ...

  4. 开发记录_自学Python写爬虫程序爬取csdn个人博客信息

    每天刷开csdn的博客,看到一整个页面,其实对我而言,我只想看看访问量有没有上涨而已... 于是萌生了一个想法: 想写一个爬虫程序把csdn博客上边的访问量和评论数都爬下来. 打算通过网络各种搜集资料 ...

  5. Python写爬虫爬妹子

    最近学完Python,写了几个爬虫练练手,网上的教程有很多,但是有的已经不能爬了,主要是网站经常改,可是爬虫还是有通用的思路的,即下载数据.解析数据.保存数据.下面一一来讲.   1.下载数据 首先打 ...

  6. 《用Python写爬虫》学习笔记(一)

    注:纯文本内容,代码独立另写,属于本人学习总结,无任何商业用途,在此分享,如有错误,还望指教. 1.为什么需要爬虫? 答:目前网络API未完全放开,所以需要网络爬虫知识. 2.爬虫的合法性? 答:爬虫 ...

  7. 《用Python写爬虫》学习笔记(二)编写第一个网络爬虫

    1.首先,下载网页使用Python的urllib2模块,或者Python HTTP模块request来实现 urllib2会出现问题,解决方法1.重试下载(设置下载次数) 2.设置用户代理 2.其次, ...

  8. python写爬虫的弯路

    一开始按照视频上的找了笔趣阁的网站先爬一部小说, 找了<遮天>,但是章节太多,爬起来太慢, 就换了一个几十章的小说. 根据视频里的去写了代码, 在正则表达式哪里出了很大的问题. from ...

  9. python写爬虫遇到需要解码js一些记录

    js在线格式化网站 https://beautifier.io/ Python 执行 JS 代码 NodeJS 安装方式 先解决 JS 环境,这里推荐安装 Node.js ,安装方便,执行效率也高. ...

随机推荐

  1. YII编码规范

    类名称: 驼峰式 首字母大字 class PointController class PointRatioController 公共成员方法: 驼峰式 首字母小写 public function ge ...

  2. [译]ava 设计模式之享元

    (文章翻译自Java Design Pattern: Flyweight) 享元模式用于最小化内存开销.它做的就是使用其他相似的对象尽可能多的分享数据. 1.享元模式类图 2.享元模式Java代码 / ...

  3. C#中float的取值范围和精度

    原文:C#中float的取值范围和精度 float类型的表现形式: 默认情况下,赋值运算符右侧的实数被视为 double. 因此,应使用后缀 f 或 F 初始化浮点型变量,如以下示例中所示: floa ...

  4. struts2 &lt;s: select 标签值

    JSP页面: <s:select label="家长导航"  value="id" name="navson.pid" list=&q ...

  5. 一些小bug

    1.ie6-ie8中是不支持的,需要加上下面这句话: filter: progid:DXImageTransform.Microsoft.Alpha(opacity=70);   2.去除虚线框 a  ...

  6. beanutils获取带参数get方法

    public Employee getEmployee(int index) {        return new Employee();    } 1.PropertyUtils.getIndex ...

  7. Asp.Net Web Api 接口

    如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问.   由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的 ...

  8. LaTeX新人30分钟从完全陌生到基本入门

    From:http://www.360doc.com/content/13/0117/11/2886802_260681908.shtml 对于真心渴望迅速上手LaTeX的人,前言部分可以跳过不看. ...

  9. IOS UI 第一篇:基本UI

    1. UI 书写 最基本创建一个label 标签 写一个first rate :      UILabel *label = [[UILabel alloc] initWithFrame:CGRect ...

  10. avalon1.0正式发布

    2013年最后的收成:avalon1.0正式发布 大半年前我就说过,MVVM是前端究极的解决方案,因此之后我大多数时间都在折腾avalon,成立了专门的QQ群与感兴趣的一起讨论.感谢第一批吃螃蟹的人, ...