python初体验之小小爬虫
小月月是个懒家伙,博客更新好慢...
前几天拿到某公司的面试题,要求在Linux/Ubuntu/Debian/Suse/Centos下用python2.7开发一个爬虫,抓取百度新闻搜索结果的前三页标题+url。
这可把对python一窍不通的小月月难住了,肿么办呢...哦,最简单有效直接的方法就是网上查资料,ok,go~!
首先感谢http://www.1point3acres.com/bbs/thread-83337-1-1.html跟http://blog.csdn.net/column/details/why-bug.html两篇文章的主人的分享,好程序猿肯定会找到女盆友滴~!(*^__^*)
ok,废话暂停,赶紧把我的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(r'href="([^"]*)"') 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)
咳咳,注释好像有点多,这样跟我一样是小白的小伙伴们就不用担心看不懂啦!
接下来说说我遇到的问题吧,其实有点不太记得了..
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下重复一遍,然后...尼玛最后愣是忘记了!!小月月蹲墙角哭去了...