最近在研究利用Python抓取新浪微博数据,用了五天的时间终于写出了这个代码,借鉴了好多人的经验,也接触到了很多新鲜的东西,在这里小小总结一下。
(一)Python模拟登陆新浪微博
这个主要是利用网上找的例子。
(二)BeautifulSoup
登陆完之后就是抓取数据部分了,这里我主要用到了两个技术。首先就是BeautifulSoup,这个是需要自己安装的,安装方法如下:
Windows平台安装Beautiful Soup
下面说一下在Windows下面如何安装Beautiful Soup:
1.http://www.crummy.com/software/BeautifulSoup/bs4/download/下载,最新版本是beautifulsoup4-4.3.2。
2.下载完成之后需要解压缩,假设放到D:/python下。
3.运行cmd,切换到D:/python27/beautifulsoup4-4.3.2/目录下(根据自己解压缩后的目录和下载的版本号修改),
cd /d D:/python27/beautifulsoup4-4.3.2
4.运行命令:
setup.py build
setup.py install
5.在IDE下from bs4 import BeautifulSoup,没有报错说明安装成功。
Beautiful Soup 的官方文档齐全,将官方给出的例子实践一遍就能掌握。官方英文文档,中文文档
我用BeautifulSoup主要是为了获取HTML文档里结构化的数据的列表,如果只是单单获取某一个数据,就可以采用正则。下面就是正则和soup一起用的例子
webpage = self.fetch(url) soup = BeautifulSoup(webpage) top_div=soup.findAll('div',{'id':'anything'}) all_a = top_div[0].findAll('a') userID = '' for a in all_a: str_href = a.get('href') #print str_href pattern = '/(\d+)/info' my_href = re.findall(pattern,str_href) if my_href: userID = my_href[0] print 'userID: ' + userID
(三)正则
Python+正则例子很多,我主要是参考这个教程http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html
核心应该就是这个图了
代码例子如下:
#获取页数 def get_page_count(self,url): pattern = 'type="hidden" value="(\d+?)"' page_number = re.findall(pattern,self.fetch(url)) if page_number: return page_number[0] return 1