python初体验之小小爬虫

小月月是个懒家伙,博客更新好慢...

前几天拿到某公司的面试题,要求在Linux/Ubuntu/Debian/Suse/Centos下用python2.7开发一个爬虫,抓取百度新闻搜索结果的前三页标题+url。

这可把对python一窍不通的小月月难住了,肿么办呢...哦,最简单有效直接的方法就是网上查资料,ok,go~!

首先感谢http://www.1point3acres.com/bbs/thread-83337-1-1.htmlhttp://blog.csdn.net/column/details/why-bug.html两篇文章的主人的分享,好程序猿肯定会找到女盆友滴~!(*^__^*)

ok,废话暂停,赶紧把我的python体验成果摆出来~

python初体验之小小爬虫
 1 # -*- coding: utf-8 -*-
 2 
 3 import urllib2 
 4 import string
 5 from bs4 import BeautifulSoup
 6 import re
 7 import sys;
 8 reload(sys);
 9 sys.setdefaultencoding(utf8);
10 
11 #--------定义函数news2,参数query为查询字符串,用于返回搜索结果------
12 def bd_news(query):
13         title = ‘‘
14         for i in range(0, 3):  #用for进行循环控制,要获取前三页信息,结合url特点,则对象集合为range(0,3)
15                 #根据分析出的百度新闻搜索结果的url特点,构造请求url
16                 url=http://news.baidu.com/ns?word=+query+&pn= + str(i * 20)+&cl=2&ct=1&tn=news&rn=20&ie=utf-8&bt=0&et=0&rsv_page=1
17 
18                 #f=open(‘123.html‘,‘a‘)#该语句跟下面的f.write/f.close语句加起来,可以将搜索出的页面保存在123.html文件中
19                 #建立连接请求,并将服务器返回的页面信息赋值给response,再对response调用read方法,返回html页面
20                 response = urllib2.urlopen( url )
21                 doc = response.read()
22                 #f.write(doc)
23                 #f.close()
24 
25                 #对doc进行BeautifulSoup处理,生成一个soup对象
26                 soup = BeautifulSoup(doc)
27                 
28                 #搜索soup对象中所有含h3标签且属性calss="c-title"的标签,并将其返回给paper_names
29                 paper_names = soup.html.body.find_all(h3, {class : c-title})
30                 #将正则表达式编译成Pattern对象实例pat1,其中,href前面的r表示是“原始字符串”
31                 pat1 = re.compile(rhref="([^"]*)")
32                 for paper_name in paper_names:
33                         title += paper_name.text
34                         #将paper_name转换成字符串,并在其中搜索pat1所表示的正则表达式.当返回MatchOdject对象实例时,表示搜索成功
35                         h = pat1.search(str(paper_name))
36                         #用group()方法处理h返回的MatchOdject对象,1表示返回该参数所对应的的字符串
37                         href = h.group(1)
38                         title += \n+href
39                         title += \n
40 
41         print title
42         # 打开文件123.txt,参数a表示往里面添加
43         f = open(123.txt,w+)
44         # 对象file的write方法将字符串title写入file中
45         f.write(title)
46         # 关闭文件
47         f.close()
48 
49 
50 #--------------begin------------------------
51 
52 print u"""#-------------------------------------------------
53 #   程序:百度新闻爬虫
54 #   作者:xiaoyueyue
55 #   日期:2014/05/05
56 #   语言:Python 2.7
57 #   实现功能:抓取百度新闻搜索结果前三页的新闻标题+url,并保存为文本文件存储在本地
58 #-------------------------------------------------
59 """
60         
61 print u请输入搜索字符串(如:pyhton):
62 inquery = str(raw_input(u ))
63 
64 #-------------函数调用---------------------
65 
66 bd_news(inquery)
python初体验之小小爬虫

咳咳,注释好像有点多,这样跟我一样是小白的小伙伴们就不用担心看不懂啦!

接下来说说我遇到的问题吧,其实有点不太记得了..

1.BeautifulSoup模块安装

下载地址:http://www.crummy.com/software/BeautifulSoup/bs4/download/

windows下安装步骤:

(1)将下载的压缩包解压,放在python安装目录下(我下载的是4-4.3.0版本)

(2)打开命令提示符,进入beautifulsoup4-4.3.0文件夹所在目录。(形如:X:XX/python2.7/beautifulsoup4-4.3.0>)

(3)执行安装命令:python setup.py build

                  python setup.py install

至此,beautifulsoup模块安装完成。

(4)在使用时,用from bs4 import BeautifulSoup引入即可。

2.如何提取标题跟url信息。

 BeautifulSoup使用文档地址:http://www.crummy.com/software/BeautifulSoup/bs4/doc/

不知道你看了感觉怎么样,反正我就是一个字:晕死了!所以我还是直接依靠广大网友去鸟~~

最开始我用的是paper_names = soup.html.body.find(‘h3‘, {‘class‘ : ‘c-title‘}).text这条语句,结果发现只能输出第一条标题。然后将find改为find_all也不对,最后经过大师指点迷津,才知道自己错在哪儿了,立马改正,然后就看到想要的结果了!href同理。

特此附上BeautifulSoup中文文档地址,

http://wenku.baidu.com/link?url=F0ChXwBXFbgf9wMobCp5a4zyh0gzpEtW2I5NnSicc2mb-m559hy5Cbs0u5ua7WlN_y5S3k5BvTHkbXvDOKxWtoBQEJTdO4C4hNLNzYfCtlK

3.自我检讨

程序发过去了才想起人家要求是在Linux下开发,开始我为了操作简单,想着等在windows下开发完了再在Linux下重复一遍,然后...尼玛最后愣是忘记了!!小月月蹲墙角哭去了...

 

 

 

python初体验之小小爬虫,布布扣,bubuko.com

python初体验之小小爬虫

上一篇:C++ 箭头-> 双冒号:: 点号.操作符区别


下一篇:C++基础笔记(四)C++内存管理