小月月是个懒家伙,博客更新好慢...
前几天拿到某公司的面试题,要求在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下重复一遍,然后...尼玛最后愣是忘记了!!小月月蹲墙角哭去了...
python初体验之小小爬虫