文档章节

基于Python的网页抓取工具

程序猿1号
 程序猿1号
发布于 2013/08/12 13:24
字数 321
阅读 298
收藏 8

今天为了抓去杭电上的ACM,于是各种查资料,用python做成了一个自动抓取相应玩个信息的程序

主要用到了Python的urllib模块和re模块  基本思路,先抓取网页的全部源代码,然后在用正则提取相应的内容

 

 

 1: # -*- coding: utf-8 -*-
 2:  
 3: import re
 4: import urllib
 5: import MySQLdb
 6:  
 7:  
 8: def down(i):
 9: url= 'http://acm.hdu.edu.cn/showproblem.php?pid='+repr(i)
 10: hdid=i
 11:  try:
 12: conn=MySQLdb.connect(host='localhost',user='root',passwd='6191080',db='gglg',port=3306,charset='gb2312')
 13: cur=conn.cursor()
 14: cur.execute('select * from acm')
 15: except MySQLdb.Error,e:
 16: print "Mysql Error %d: %s" % (e.args[0], e.args[1])
 17: 
 18: f = urllib.urlopen(url)
 19: html = f.read()
 20: description = re.compile(u'Problem Description.*Author', re.DOTALL)
 21:  
 22: style = description.search(html)
 23:  
 24: 
 25:  if style:
 26: html = style.group(0)
 27: para = re.sub('<[^>]*>', '', html);
 28: para=para.replace('&nbsp','')
 29: 
 30: list1=para.rsplit(';')
 31: 
 32: 
 33:  
 34: list1[0]=list1[0].replace('Problem Description','')
 35: list1[1]=list1[1].replace('Input','')
 36: list1[2]=list1[2].replace('Output','')
 37: list1[3]=list1[3].replace('Sample Input','')
 38: list1[4]=list1[4].replace('Sample Output','')
 39:  for i in range(0,5):
 40: print list1[i]
 41: sql="INSERT INTO acm (Description,Input,Output,samplein,sampleout,HDid) VALUES (\""+list1[0]+"\",\""+list1[1]+"\",\""+list1[2]+"\",\""+list1[3]+"\",\""+list1[4]+"\",\""+repr(hdid)+"\")"
 42: cur.execute(sql)
 43: print sql
 44: conn.commit()
 45: cur.close()
 46: conn.close()
 47: 
 48:  else:
 49: print 'Not found.'
 50: 
 51:  
 52: def main():
 53: start=0;
 54: end=4000;
 55: 
 56:  for i in range(strat,end):
 57: 
 58: down(i)
 59: main()

fff

© 著作权归作者所有

程序猿1号
粉丝 1
博文 4
码字总数 969
作品 0
巴南
私信 提问
无需图形界面环境下的浏览器项目一览表

本表几乎列出了所有无需图形界面环境下的浏览器开源项目,可用于自动化、测试或者其他用途。 软件名 介绍 支持语言 Awesomium 基于Chromium无图形界面浏览器引擎。 C++, .NET benv Benv是nod...

oschina
2016/07/27
14.9K
18
Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记

Python 实现 CNKI批量下载 和FireFox Extension 入门学习笔记 由于需要也是为了督促自己学习新的东西,我原本想要尝试着写一个爬虫程序,能够在cnki上自动得将论文进行批量下载,学习过程中遇...

猜猜我是吧
2014/09/17
4.1K
2
Python爬取妹子,哇!太多了,看不过来了,我一个G的硬盘要满了

淘女郎爬虫,可动态抓取淘女郎的信息和照片。 需要额外安装的第三方库 加小编Python学习群:813542856可以获取各类Python学习资料哦! requests pip install requests pymongo pip install ...

浪里小白龙q
2018/11/27
0
0
一套来自年薪40W的Python大神分享的学习体系

不论你是对Python初出茅庐,还是如指诸掌,这篇文章对你的收获总归还是有的啦,可能只是程度的问题。好了不扯远了,来说正题,下面在分享这套体系前还是要让Python做一下“自我介绍”。 1.Py...

Python共读
2018/08/27
0
0
同事每天都买两张彩票,利用Python抓取彩票中奖数据,可笑至极!

问他为什么每天都要买彩票,他说经常看新闻,看到很多人中大奖。我笑着反问,彩票预测可信吗?中奖的概率又是多少呢? (私信小编001 、002 、003 、007任意即可获取Python学习资料) 我不知...

Python新世界
2018/07/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

centos7命令行和图形界面的相互切换

最近安装了centos7,发现在命令行和图形界面的相互切换命令上,与centos以往版本有很大不同。 1,centos7默认安装后,跟其他版本一样,启动默认进入图形界面; 2,在图形化桌面,右击鼠标,选...

无名氏的程序员
21分钟前
6
0
对称的二叉树

请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 boolean isSymmetrical(TreeNode pRoot) { if (pRoot == null) ...

Garphy
30分钟前
3
0
快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么

一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。 原理:迭代器在...

Bb进阶
32分钟前
7
0
golang 数据库与JSON解析一起 用空格分割

type Stocks struct { Id string `xorm:"varchar(64) pk" json:"id"` Name string `xorm:"varchar(64)" json:"name"` StockNum str......

zdglf
36分钟前
6
0
恨天诀——第一集 第五章

天似穹庐,笼盖四野。 静静矗立的天柱峰,像一把长剑,直插云霄。山南显得格外阴冷,萧瑟。 “龙儿,何为天道?”一长一少两人默默并排而立,长者问道。 良久,少年回答:“父亲,恕孩儿驽钝...

Kerwin_zZ
42分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部