python爬取网页公告并批量存入至mysql中
2015-07-30 23:42
671 查看
开发环境:python 2.7.6,mysql 5.5-44
#coding=utf-8
import urllib2
import urllib
import string
import re
import MySQLdb
req=urllib2.Request("http://jw.nju.edu.cn/")
response=urllib2.urlopen(req)
myPage=response.read()
#temp=myPage.decode('utf8')
#xx="<ul><li>(.*)<span class='top'>"
#pattern = re.compile(xx)
#results = list(pattern.findall(temp))
#for result in results :
# print result
#置顶公告
pattern=re.compile("<ul><li>(.*)<span class='top'>")
myMatch=pattern.search(myPage,re.S)
sa=myMatch.group(1)
BgnPartRex = re.compile("\'") #将页面源码中 ' 匹配掉
sa=BgnPartRex.sub("",sa)
tongzhi=re.compile('title=(.*?)>')
lianjie=re.compile('FType=WZSY&(.*?)title')
title=tongzhi.findall(sa,re.S) #返回list
print type(title[0])
url=lianjie.findall(sa,re.S)
#非置顶公告
pattern2=re.compile("<ul><li>(.*?)</span></li></ul>")
myMatch=pattern2.search(myPage,re.S)
sa=myMatch.group(1)
BgnPartRex = re.compile("(.*)<span class='top'>")
sa=BgnPartRex.sub("",sa)
BgnPartRex = re.compile("\'")
sa=BgnPartRex.sub("",sa)
tongzhi2=re.compile('title=(.*?)>')
lianjie2=re.compile('FType=WZSY&(.*?)title')
title2=tongzhi2.findall(sa,re.S)
url2=lianjie2.findall(sa,re.S)
zhiding=[]
feizhiding=[]
for i in range(len(title)):
zhiding.append((0,title[i],url[i]))
zhiding.reverse() #逆序存放,方便后面读取时新数据在最前
for m in range(len(title2)):
feizhiding.append((0,title2[m],url2[m]))
feizhiding.reverse()
conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='python',charset='utf8')
cur=conn.cursor()
cur.executemany('insert into zhiding values(%s,%s,%s)',zhiding) #批量存放
cur.executemany('insert into title values(%s,%s,%s)',feizhiding)
conn.commit()
cur.close()
conn.close()
在进行爬取时一定要注意观察页面源码,如在区分置顶帖和非置顶帖时,因置顶帖后面带有 [置顶],本想通过匹配[置顶]来区分置顶帖和非置顶帖,但是汉字匹配以及其他一些问题耗费了我很多时间,而后再仔细看了一下页面源码,发现置顶帖都有一个标签:<span class='top' ,这样一来就方便了许多。
cur.executemany('insert into zhiding values(%s,%s,%s)',zhiding) 等价于
for i in range(len(zhiding))
cur.execute('insert into zhiding values(%s,%s,%s)',zhiding[i])
#coding=utf-8
import urllib2
import urllib
import string
import re
import MySQLdb
req=urllib2.Request("http://jw.nju.edu.cn/")
response=urllib2.urlopen(req)
myPage=response.read()
#temp=myPage.decode('utf8')
#xx="<ul><li>(.*)<span class='top'>"
#pattern = re.compile(xx)
#results = list(pattern.findall(temp))
#for result in results :
# print result
#置顶公告
pattern=re.compile("<ul><li>(.*)<span class='top'>")
myMatch=pattern.search(myPage,re.S)
sa=myMatch.group(1)
BgnPartRex = re.compile("\'") #将页面源码中 ' 匹配掉
sa=BgnPartRex.sub("",sa)
tongzhi=re.compile('title=(.*?)>')
lianjie=re.compile('FType=WZSY&(.*?)title')
title=tongzhi.findall(sa,re.S) #返回list
print type(title[0])
url=lianjie.findall(sa,re.S)
#非置顶公告
pattern2=re.compile("<ul><li>(.*?)</span></li></ul>")
myMatch=pattern2.search(myPage,re.S)
sa=myMatch.group(1)
BgnPartRex = re.compile("(.*)<span class='top'>")
sa=BgnPartRex.sub("",sa)
BgnPartRex = re.compile("\'")
sa=BgnPartRex.sub("",sa)
tongzhi2=re.compile('title=(.*?)>')
lianjie2=re.compile('FType=WZSY&(.*?)title')
title2=tongzhi2.findall(sa,re.S)
url2=lianjie2.findall(sa,re.S)
zhiding=[]
feizhiding=[]
for i in range(len(title)):
zhiding.append((0,title[i],url[i]))
zhiding.reverse() #逆序存放,方便后面读取时新数据在最前
for m in range(len(title2)):
feizhiding.append((0,title2[m],url2[m]))
feizhiding.reverse()
conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='python',charset='utf8')
cur=conn.cursor()
cur.executemany('insert into zhiding values(%s,%s,%s)',zhiding) #批量存放
cur.executemany('insert into title values(%s,%s,%s)',feizhiding)
conn.commit()
cur.close()
conn.close()
在进行爬取时一定要注意观察页面源码,如在区分置顶帖和非置顶帖时,因置顶帖后面带有 [置顶],本想通过匹配[置顶]来区分置顶帖和非置顶帖,但是汉字匹配以及其他一些问题耗费了我很多时间,而后再仔细看了一下页面源码,发现置顶帖都有一个标签:<span class='top' ,这样一来就方便了许多。
cur.executemany('insert into zhiding values(%s,%s,%s)',zhiding) 等价于
for i in range(len(zhiding))
cur.execute('insert into zhiding values(%s,%s,%s)',zhiding[i])
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- install and upgrade scrapy
- source命令执行SQL脚本文件
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- linux下mysql添加用户
- Python中zip()函数用法举例