python爬取网页公告并批量存入至mysql中

来源:互联网 发布:c语言添加线程 编辑:程序博客网 时间:2024/06/05 16:07

开发环境:python 2.7.6,mysql 5.5-44

#coding=utf-8import urllib2import urllibimport stringimport reimport MySQLdbreq=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)                                                    #返回listprint 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])


0 0
原创粉丝点击