招生考试网的自动更新爬虫

磊落不羁 by:磊落不羁 分类:爬虫 时间:2年前 阅读:1291 评论:0

本程序写的目的主要是同步单位的网站信息和上级网站信息,采用爬虫自动分析出信息URL所属类别,获取分类ID 然后对采集网站内容 放入mysql数据库中

程序整个过程使用pymysql request   re time  urllib3 1.25版本 几个包 

思路如下

1、获取列表页url列表

2、循环url 获取网页的信息所属类别

3、查询数据库中是否存在该来源url 如果存在说明文章存在 跳过 不存在则进入文章页面进行采集

4、采集文章页面,获取几个信息

5、写入信息到数据库中


程序采用同步采集  没有使用 多线程 多进程或者协程  对于一个网站信息的采集来讲确实没有必要

程序如下:

#本程序主要用于网站的自动更新

import  requests
import re
import pymysql
import time
import urllib3
urllib3.disable_warnings()


def get_node_id(url): #用于获取分类分类id
   surl=url.split('/')[-3]
   if surl=='ptgk':  #普通高考
      return  24
   elif surl == 'xysphgxks':
      return 24
   elif surl == 'xxjsxk':
      return 24
   elif surl == 'zzzjgk':
      return 24
   elif surl == 'kjhjmhzf':
      return 24
   elif surl == 'jrdd':
      return  16
   elif surl == 'gsl':
      return 16
   elif surl == 'gkzhgg': # 高考综合改革
      return 25
   elif surl == 'gzdxxzskszk': # 高中段学校招生考试(中考)
      return  11
   elif surl == 'kjqsnhkxxzs': # 空军青少年航空学校招生
      return  11
   elif surl == 'jsszxxxyzlcs': # 江苏省中小学学业质量测试
      return  11
   elif surl == 'zzxc': #中职学测
      return  11
   elif surl == 'zxks': # 自学考试
      return 13
   elif surl == 'zxxjszgks': #教师资格
      return 14
   elif surl == 'jsssfspdjzsks':   #书法等级考试
      return 15
   else:   #其他信息一概放入其他考试栏目
      return  16
   
   
   
   
def runee(url):
   #首先 获得指定链接列表
   html=requests.request(method='get', url=url)
   html.encoding='UTF-8'
   html=html.text
   article_urls=re.findall('<li><span>.*?</span><a href="(.*?)" target="_blank" title=".*?">.*?</a></li> ',html,re.S)
   article_urls=article_urls[:20]
   article_new_urls=[]
   for a in article_urls:
      new_urls="http://www.lygzsks.cn/"+a
      article_new_urls.append(new_urls)
   
   # print(article_new_urls)     #article_new_urls 才是页面采集所有列表的集合
   #其次更具列表查询数据库是否存在该列表
   conn=pymysql.connect(host='localhost',user='用户名隐藏',password='密码隐去',database='数据库隐藏',port=3306)
   cursor=conn.cursor()
   cursor.execute("SELECT `source_url` FROM `rrz_articles`  ORDER BY `id` DESC LIMIT 30")
   rs=cursor.fetchall()
   result=[]
   # print(rs)
   for j in rs:
      if j[0] is not None:
         result.append(j[0])
   result=list(set(result))
   
   # print(result)
   for i in article_new_urls:
      if i not in result:
         id=str(get_node_id(i)) #获取id
         chtml=requests.get(i)
         chtml.encoding='utf-8'
         chtml=chtml.text
         # print(chtml)
         rat=re.finditer(r'<div class="inContainer"> .*?<h3>(?P<title>.*?)</h3>.*?<span>信息来源:(?P<source>.*?)</span>.*?<span>发布日期:(?P<posttime>.*?)</span>.*?<div class="inContainer-content"> (?P<content>.*?)</div>.*?<div class="inContainer-cpage"> ',chtml,re.S)
         for at in rat:
            title = at.group('title')
            source = at.group('source')
            posttime = at.group('posttime')
            content = at.group('content')
            content=content.replace(r'src="/picture/',r'src="http://www.lygzsks.cn/picture/')
            timeArray = time.strptime(posttime, "%Y-%m-%d %H:%M")
            # 转换为时间戳
            timeStamp = int(time.mktime(timeArray))
            # print(title, source, timeStamp, "11111")
            
         #执行插入mysql
         sql="INSERT INTO `rrz_articles` (`id`, `node_id`, `title`, `content`, `author`, `pubtime`, `ifpub`, `source`, `source_url`) VALUES (NULL, '%s', '%s','%s','%s','%s', 'true','%s','%s');"%(id,title,content,source,timeStamp,source,i)
         cursor.execute(sql)
         conn.commit()
         print("资讯【"+title+"】增加成功")
      
      else:
         pass
   cursor.close()
   conn.close()

url='http://www.lygzsks.cn/lygsjyksy/zkzx/zkzx.html'
runs=True
b=1
while runs:
   runee(url)
   time_neow=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
   print("【"+str(time_neow)+"】--------第【"+str(b)+"】次运行完毕")
   b +=1
   time.sleep(720)


非特殊说明,本文版权归原作者所有,转载请注明出处

本文地址:http://php.liulei.com.cn/?type=acticle&id=23

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址

TOP