招生考试网的自动更新爬虫
本程序写的目的主要是同步单位的网站信息和上级网站信息,采用爬虫自动分析出信息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)
评论列表
发表评论