利用python抓取网页各种类型内容(静态、动态)

来源:互联网 发布:阿里云邮箱 别名管理 编辑:程序博客网 时间:2024/05/22 08:01

声明:

       本实验的操作系统是ubuntu,python 2.X

Code-1:抓取静态的title数据(无需登录用户)

获取淘宝主页的页面静态数据

url:http://www.taobao.com

#!/usr/bin/envpython #-*- coding: utf-8 -*-#@authorAmiber#@date2012-12-01#@brief grap the static-web data with chinese languagfrom BeautifulSoup import BeautifulSoupimport urllib2url = r"http://www.taobao.com"resContent = urllib2.urlopen(url).read()resContent = resContent.decode('gbk').encode('utf8')soup = BeautifulSoup(resContent)print soup.title.stringurl = r"http://www.news.baidu.com"resContent = urllib2.urlopen(url).read().decode('gb18030').encode('utf8')soup = BeautifulSoup(resContent)print soup.title.string

Code-2:抓取静态网页中的table数据(无需登录用户)

获取的是国家统计局一个网上上的静态表格数据

#!/usr/bin/envpython#!-*- coding:utf-8 -*-#@authorAmiber#@date2012-12-01#@brief grap the table-data in static-webfrom BeautifulSoup import BeautifulSoupimport urllib2import reimport stringdef earse(strline,ch) :left = 0right = strline.find(ch)while right !=-1 :strline = strline.replace(ch,'')right = strline.find(ch)return strlineurl = r"http://www.bjstats.gov.cn/sjfb/bssj/jdsj/2012/201211/t20121130_239295.htm"resContent = urllib2.urlopen(url).read()resContent = resContent.decode('gb18030').encode('utf8')soup = BeautifulSoup(resContent)print soup('title')[0].stringtab= soup.findAll('table')trs = tab[len(tab)-1].findAll('tr')for trIter in trs :tds = trIter.findAll('td')for tdIter in tds :span = tdIter('span')for i in range(len(span)) :if span[i].string :print earse(span[i].string,' ').strip(),else :passprint 

Code-3:抓取静态网页中的文档数据(无需登录用户)

获取的是一个bbs网站的一个zip文档数据

#!/usr/bin/envpython #!-*- coding:utf-8 -*-#@authorAmiber#@date 2012-12-01#@brief download  the file from  web-sitefrom BeautifulSoup import BeautifulSoupimport urllib2import stringimport reurl = r"http://bbs.for68.com/getresource.php?rid=59906"re = urllib2.Request(url)rs = urllib2.urlopen(re).read()open('down.tar','wb').write(rs)


Code-4:抓取静态网页中的图片数据(无需登录用户)

获取一个网站上的图片数据

#!/usr/bin/envpython#!-*- coding: utf-8 -*-#@authorAmiber#@date 2012-12-01#@brieffrom BeautifulSoup import BeautifulSoupimport urllib2import reimport stringurl = r"http://tu.365imgs.cn/img/h005/h84/img20121127094009JEn0.jpg"re = urllib2.Request(url)resouce = urllib2.urlopen(re).read()open("wall.jpg","wb").write(resouce)


Code-5:抓取静态网页中的数据(登录用户)

这个例子是参考了一个博客,登录人人网站并且抓取登录后的网页

#!/usr/bin/envpython #!-*- coding: utf-8 -*-#@author Amiber#@date 2012-12-02#@brief grap the data when log is neededimport urllibimport urllib2import cookielibfrom BeautifulSoup import BeautifulSoupimport stringimport remyCookie = urllib2.HTTPCookieProcessor(cookielib.CookieJar())openner = urllib2.build_opener(myCookie)post_data = {'email':'XXXXXXXX','password':'YYYYYYYYY','origURL':'http://www.renren.com/Home.do','domain':'renren.com'}req = urllib2.Request('http://www.renren.com/PLogin.do',urllib.urlencode(post_data))resContent = openner.open(req).read()soup =  BeautifulSoup(resContent)print soup.prettify()


Code-6:抓取动态网页中的查询-1数据(无需登录用户)

此类别的查询数据是,当你改变查询条件,整个url都变。下面以抓取天气预报网站上的查询数据为例子

#!/usr/bin/envpython #!-*- coding: utf-8 -*-#@authorAmiber#@date2012-12-02#@brief grap the query-data in static -web#@brief the difference is that when you change your query,the url is differentfrom BeautifulSoup import BeautifulSoupimport urllib2import reimport stringimport sysimport codecsurl = r"http://www.weather.com.cn/weather/101070105.shtml"lookutf_8 = codecs.lookup('utf8')resContent = urllib2.urlopen(url).read()resContent = lookutf_8.decode(resContent)[0]resContent = lookutf_8.encode(resContent)[0]soup = BeautifulSoup(resContent)weatherYuBao = soup.findAll('div',id='7d')print weatherYuBaourl = r"http://www.weather.com.cn/weather/101010100.shtml?"resContent = urllib2.urlopen(url).read()resContent = lookutf_8.decode(resContent)[0]resContent = lookutf_8.encode(resContent)[0]soup =BeautifulSoup(resContent)weatherYuBao = soup.findAll('div',id='7d')print weatherYuBao


code-7:抓取动态网页中的查询-2数据(无需登录用户)

抓取的数据是互动百科的分类数,网址为:http://www.hudong.com/category/treeManage.jsp

通过对原网页代码研究:view-source:http://www.hudong.com/category/treeManage.jsp

可以找到js文件:http://www.huimg.cn/fenlei/js/Ajax_cate20111205.js

找到url的生成js函数为:searchcate

从而可以推断出ajax数据生成的url为:http://www.hudong.com/category/Ajax_cate.jsp?catename=%query%

#!/usr/bin/envpython #!-*- coding: utf-8 -*- #@authorAmiber#@date 2012-12-02#@briefgrep the hudong-tree-structor#keyUrl[0] = "http://www.hudong.con/category/treeManager.jsp"#keyUrl[1] = "http://www.huimg.cn/fenlei/js/Ajax_cate20111205.js"#KeyUrl[2] = "http://www.hudong/category/Ajax_cate.jsp?catename=%query%"from BeautifulSoup import BeautifulSoupimport reimport stringimport urllib2import codecsimport Queuebaseurl = "http://www.hudong.com/category/Ajax_cate.jsp?catename="def getAllCategory(contentList,query) :'''   recusive get the tree-structure'''url = baseurl+urllib2.quote(query)resContent = urllib2.urlopen(url).read()if len(resContent) > 3 and resContent.find('}') !=-1 :resContent = resContent[2:len(resContent)-3]else :contentList.append([])return soup = BeautifulSoup(resContent)content = soup.__str__().split('},')conList = []print query,":",for cIter in content :tmpList = map(lambda str: str.strip('"').rstrip('"}]'),cIter.split(':'))elist =[]elist.append(tmpList[len(tmpList)-1])print tmpList[len(tmpList)-1],conList.append(elist)printcontentList.append(conList)for cLIter in conList :getAllCategory(cLIter,cLIter[0])def main() :query="页面总分类"url = baseurl+urllib2.quote(query)resContent = urllib2.urlopen(url).read()lookutf_8 = codecs.lookup('utf8')if len(resContent) >3 :resContent = resContent[2:len(resContent)-3]soup = BeautifulSoup(resContent)print query,": ",content = soup.__str__().split('},')contentList = []for cIter in content :tmpList = map(lambda str: str.strip('"').rstrip('"}]'),cIter.split(':'))elist = []elist.append(tmpList[len(tmpList)-1])print tmpList[len(tmpList)-1],contentList.append(elist)print for cIter in contentList :getAllCategory(cIter,cIter[0])print if __name__ == '__main__' :main()
Notice:考虑到速度问题,可以在迭代求子分类的时候采用多线程,因为分类中间彼此独立

生成数据部分显示:

页面总分类 :  自然 文化 人物 历史 生活 社会 艺术 经济 科学 体育 技术 地理 HOT
自然 : 植物 动物 自然现象 自然资源 环境保护 微生物 宇宙天文 生物 自然理论 自然遗产 地质灾害 生物分类
植物 : 种子植物 藻类植物 农作物 植物理论 各类型植物 珍稀濒危植物 蕨类植物 各国植物 苔藓类植物 菌类植物 地衣植物 苔藓植物 植物栽培 园林植物 热带植物 植物分类表 绿色植物 水生植物
种子植物 : 裸子植物
裸子植物 : 裸子植物名称
农作物 : 玉米
植物理论 : 植物科名 生命 植物科属 植物分类 植物学名词
生命 : 元素
各类型植物 : 草本植物 可以食用的植物 观赏植物 被子植物分支 竹 孑遗植物 有毒植物 食肉植物 木本植物 著名植物 药用植物 一年生植物 捕虫植物 形形色色植物 趣味植物 受保护植物 罕见植物 园林绿化植物 经济植物 各类植物名称 低等植物 高等植物 花木 中国进境植物检疫危险性病虫草 植物名称 双子叶植物 藤本植物 浮游植物 沙漠植物
草本植物 : 草本
可以食用的植物 : 水果 蔬菜 茶 调味品 草本茶 谷类 香草 可食用果仁 玉米
水果 : 水果种类 减肥水果 果汁水果 梨
水果种类 : 浆果 核果 坚果 仁果 柑橘 瓜
仁果 : 梨
瓜 : 西瓜
果汁水果 : 防腐剂 纤维素 维生素C
蔬菜 : 食用菌 蔬菜种植 蔬菜配送 蔬菜农药 脱水蔬菜 蔬菜种子 野菜
蔬菜配送 : 食堂管理 农副产品
蔬菜农药 : 定量分析 工商局
茶 : 茶学 茶文化 中国各种茶名 中国名茶 茶的种类
茶学 : 茶文化 茶学文献
茶文化 : 茶具 茶道 茶艺 制茶方法 茶健康
茶具 : 茶杯 茶壶
茶壶 : 紫砂壶
茶道 : 日本茶道
茶文化 : 茶具 茶道 茶艺 制茶方法 茶健康
茶具 : 茶杯 茶壶
茶壶 : 紫砂壶
茶道 : 日本茶道
中国名茶 : 铁观音 普洱茶
茶的种类 : 白茶 绿茶 黑茶 红茶 黄茶 花茶 草本茶 凉茶 乌龙茶 紧压茶 普洱茶 别类茶
调味品 : 甜味剂 酱 香草 广东调味料 亚洲调味料 醋 食盐 烹调调料 调料
甜味剂 : 二糖
酱 : 酱油 咖哩
咖哩 : 咖哩食品
广东调味料 : 香港调味料
烹调调料 : 香料
调料 : 烹调调料
烹调调料 : 香料
谷类 : 谷类食品 水稻
谷类食品 : 面粉制品 稻米食品
面粉制品 : 面包 面条 蛋糕 饼干 烤饼 油炸面食
面包 : 三明治 饼店
面条 : 即食面 意式面食 中式面条 日式面条
日式面条 : 日本面条食品
蛋糕 : 饼店
饼干 : 饼店 馅饼
稻米食品 : 饭 粥 糯米食品
饭 : 炒饭 寿司
水稻 : 杂交水稻
观赏植物 : 观叶植物
被子植物分支 : 单子叶植物分支 木兰分支 睡莲科 金鱼藻目 木兰藤目 金粟兰科 无油樟科
单子叶植物分支 : 鸭跖草分支 天门冬目 薯蓣目 无叶莲科
鸭跖草分支 : 禾本目
禾本目 : 禾本科 莎草科 梭子草科 香蒲科 凤梨科 灯心草科 帚灯草科 黑三棱科 黄眼草科 苔草科 刺鳞草科 须叶藤科 谷精草科
禾本科 : 结缕草属 画眉草属 芨芨草属 酸竹属 尖稃草属 凤头黍属 山羊草属 獐毛属 冰草属 剪股颖属 银须草属 毛颖草属 看麦娘属 悬竹属 须芒草属 异颖草属 黄花茅属 水蔗草属 楔颖草属 三芒草属 燕麦草属 荩草属 野古草属 芦竹属 沟稃草属 燕麦属 地毯草属 簕竹属 巴山木竹属 菵草属 孔颖草属 格兰马草属 臂形草属 短颖草属 短柄草属 短穗竹属 凌风草属 雀麦属 扁穗草属 野牛草属 拂子茅属 细柄草属 沿沟草属 小沿沟草属 蒺藜草属 酸模芒属 空竹属 山涧草属 寒竹属 香竹属 虎尾草属 金须茅属 单蕊草属 隐子草属 小丽草属 空轴茅属 薏苡属 莎禾属 蒲苇属 隐花草属 香茅属 狗牙根属 洋狗尾草属 弓果黍属 鸭茅属 龙爪茅属 扁芒草属 绿竹属 牡竹属 发草属 羽穗草属 野青茅属 双药芒属 龙常草属 二型花属 双花草属 马唐属 觿茅属 弯穗草属 双稃草属 镰序竹属 毛蕊草属 油芒属 稗属 穇属 披碱草属 偃麦草属 总苞草属 九顶草属 肠须草属 细画眉草属 蜈蚣草属 旱禾属 旱茅属 旱麦草属 鹧鸪草属 蔗茅属 野黍属 类蜀黍属 黄金茅属 拟金茅属 真穗草属 箭竹属 铁竹属 羊茅属 耳稃草属 井冈寒竹属 吉曼草属 巨竹属 甜茅属 球穗草属 镰稃草属 异燕麦属 牛鞭草属 假蛇尾草属 黄茅属 茅香属 绒毛草属 大麦属 水禾属 膜稃草属 苞茅属 猬草属 距花黍属 白茅属 箬竹属 大节竹属 柳叶箬属 鸭嘴草属 旱莠竹属 假稻属 囊稃竹属 千金子属 薄稃草属 细穗草属 银穗草属 赖草属 单竹属 扇穗茅属 黑麦草属 淡竹叶属 臭草属 糖蜜草属 梨藤竹属 梨竹属 月月竹属 异枝竹属 小草属 莠竹属 粟草属 芒属 毛俭草属 麦氏草属 单枝竹属 乱子草属 河八王属 山鸡谷草属 新小竹属 慈竹属 类芦属 少穗竹属 蛇尾草属 求米草属 固沙草属 直芒草属 稻属 落芒草属 露籽草属 黍属 假拟沿沟草属 假牛鞭草属 类雀稗属 雀稗属 狼尾草属 茅根属 束尾草属 显子草属 虉草属 梯牧草属 芦苇属 刚竹属 大明竹属 早熟禾属 金发草属 棒头草属 多裔草属 单序草属 沙鞭属 新麦草属 假铁秆草属 钩毛草属 假金发草属 伪针茅属 矢竹属 泡竹属 细柄茅属 碱茅属 筇竹属 红毛草属 鹅观草属 筒轴茅属 甘蔗属 囊颖草属 赤竹属 齿稃草属 裂稃茅属 硬草属 水茅属 黑麦属 沟颖草属 业平竹属 狗尾草属 刺毛头黍属 倭竹属 唐竹属 三蕊草属 高粱属 米草属 稗荩属 鬣刺属 大油芒属 鼠尾栗属 钝叶草属 冠毛草属 针茅属 坚轴草属 筱竹属 菅属 蒭雷草属 锥茅属 泰竹属 粽叶芦属 钝基草属 锋芒草属 荻属 三角草属 草沙蚕属 磨擦草属 三毛草属 小麦属 尾稃草属 香根草属 鼠茅属 玉山竹属 玉蜀黍属 菰属 裂稃草属