python爬取政府通知_python爬取网页公告并批量存入至mysql中

开发环境: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="

  • (.*)"

    #pattern = re.compile(xx)

    #results = list(pattern.findall(temp))

    #for result in results :

    # print result

    #置顶公告

    pattern=re.compile("

    • (.*)")

      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("

      • (.*?)
    ")

    myMatch=pattern2.search(myPage,re.S)

    sa=myMatch.group(1)

    BgnPartRex = re.compile("(.*)")

    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()

    在进行爬取时一定要注意观察页面源码,如在区分置顶帖和非置顶帖时,因置顶帖后面带有 [置顶],本想通过匹配[置顶]来区分置顶帖和非置顶帖,但是汉字匹配以及其他一些问题耗费了我很多时间,而后再仔细看了一下页面源码,发现置顶帖都有一个标签:

    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])

你可能感兴趣的:(python爬取政府通知)