소스 검색

爬虫爬取api.1473.cn,把数据写入数据库,读取数据库数据并生成sitemap文件

chuwanghui 6 년 전
부모
커밋
fb34ac7790
2개의 변경된 파일114개의 추가작업 그리고 38개의 파일을 삭제
  1. 29 0
      usestudiodatabase.py
  2. 85 38
      usestudioxml.py

+ 29 - 0
usestudiodatabase.py

@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+__author__ = 'cwh'
+
+
+#  使用DBUtils连接数据库的方法,比twisted简单很多。
+import MySQLdb
+from DBUtils.PooledDB import PooledDB
+
+#api.1473.cn在数据库中的站点地图数据
+class ApiSitemapData(object):
+    def __init__(self):
+        self.pool = PooledDB(MySQLdb,5,host='10.20.5.88',user='root',passwd='usestudio-1',db='US_Crawler',port=14062,charset="utf8")
+
+    def selectData(self):
+        conn = self.pool.connection()
+        cur = conn.cursor()
+        # 调用存储过程示例
+        #cur.callproc('InsertAPIData', ('1000','张三'))
+        # 存储过程传递参数
+        #cur.callproc('InsertAPIData', (item['name'],item['name']))
+        cur.callproc('SiteMapData',())
+        _tuples= cur._cursor._rows
+        #for t in _tuples:
+        #    print(t)
+        # print out the result
+        cur.close()
+        conn.commit()
+        conn.close()
+        return  _tuples

+ 85 - 38
usestudioxml.py

@@ -1,46 +1,93 @@
 # -*-coding:utf-8-*-
 #支持中文必须加上上面一句话
-
-__author__ = 'Administrator'
-
+__author__ = 'cwh'
+#xml文件处理类
 import xml.dom.minidom
-
+#包含时间类
+import datetime
+#导入数据库处理文件
+from usestudiodatabase import ApiSitemapData
 
 class UsestudioXML:
-    #在内存中创建一个空的文档
-    doc = xml.dom.minidom.Document()
+
     #数据
-    managerList =[{'name': 'joy', 'age': 27, 'sex': '女'},
-        {'name': 'tom', 'age': 30, 'sex': '男'},
-        {'name': 'ruby', 'age': 29, 'sex': '女'}
-    ]
-    def createRoot(self):
-        #创建一个根节点Managers对象
-        root = self.doc.createElement('Managers')
+    apidb=ApiSitemapData()
+    apiData=apidb.selectData();
+
+    #当索引超过五万时,启用此函数。
+    def apiSitemap(self):
+        #在内存中创建一个空的文档
+        doc = xml.dom.minidom.Document()
+        #创建一个根节点sitemapindex对象
+        root = doc.createElement('sitemapindex')
+        doc.appendChild(root)
+
+        #当索引文件超过五万时,以下文件需要循环生成。
+        nodeUrl = doc.createElement('sitemap')
+        #给叶子节点loc设置一个文本节点,用于显示站点地图的url
+        nodeLoc = doc.createElement('loc')
+        nodeLoc.appendChild(doc.createTextNode('http://api.1473.cn/seo/sitemap1.xml'))
+        #添加时间节点
+        nodeLastmod = doc.createElement("lastmod")
+        #nodeLastmod.appendChild(doc.createTextNode(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
+        nodeLastmod.appendChild(doc.createTextNode(datetime.datetime.now().strftime('%Y-%m-%d')))
+        #将各叶子节点添加到父节点url中,
+        #最后将url节点添加到根节点root中
+        nodeUrl.appendChild(nodeLoc)
+        nodeUrl.appendChild(nodeLastmod)
+        root.appendChild(nodeUrl)
+
+
+        #开始写xml文档,"w+",打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
+        fp = open('c:\\usestudioxml\\sitemapindex.xml', 'w+')
+        #写入XML头,类似<?xml version="1.0" encoding="utf-8"?>
+        #indent='\t' 指第一个urlset的空格个数   addindent='\t'为后面的元素的空格间距。
+        #doc.writexml(fp, indent='\t', addindent='\t', newl='\n', encoding="utf-8")
+        doc.writexml(fp, addindent='    ', newl='\n', encoding="utf-8")
+
+    def apiXML(self):
+
+        #在内存中创建一个空的文档
+        doc = xml.dom.minidom.Document()
+        #创建一个根节点root对象
+        root = doc.createElement('urlset')
+
         #设置根节点的属性
-        root.setAttribute('company', 'xx科技')
-        root.setAttribute('address', '科技软件园')
+        #root.setAttribute('company', '有思俱乐部')
+        #root.setAttribute('address', '科技软件园')
         #将根节点添加到文档对象中
-        self.doc.appendChild(root)
-    def addNode(self):
-        for i in self.managerList:
-            nodeManager = self.doc.createElement('Manager')
-            nodeName = self.doc.createElement('name')
-            #给叶子节点name设置一个文本节点,用于显示文本内容
-            nodeName.appendChild(self.doc.createTextNode(str(i['name'])))
-
-            nodeAge = self.doc.createElement("age")
-            nodeAge.appendChild(self.doc.createTextNode(str(i["age"])))
-
-            nodeSex = self.doc.createElement("sex")
-            nodeSex.appendChild(self.doc.createTextNode(str(i["sex"])))
-
-            #将各叶子节点添加到父节点Manager中,
-            #最后将Manager添加到根节点Managers中
-            nodeManager.appendChild(nodeName)
-            nodeManager.appendChild(nodeAge)
-            nodeManager.appendChild(nodeSex)
-            root.appendChild(nodeManager)
-            #开始写xml文档
-            fp = open('c:\\wcx\\Manager.xml', 'w')
-            self.doc.writexml(fp, indent='\t', addindent='\t', newl='\n', encoding="utf-8")
+
+        doc.appendChild(root)
+        for i in self.apiData:
+
+            nodeUrl = doc.createElement('url')
+
+            #给叶子节点loc设置一个文本节点,用于显示站点地图的url
+            nodeLoc = doc.createElement('loc')
+            nodeLoc.appendChild(doc.createTextNode(i[0]))
+
+            #添加时间节点
+            nodeLastmod = doc.createElement("lastmod")
+            #nodeLastmod.appendChild(doc.createTextNode(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')))
+            nodeLastmod.appendChild(doc.createTextNode(datetime.datetime.now().strftime('%Y-%m-%d')))
+
+            #将各叶子节点添加到父节点url中,
+            #最后将url节点添加到根节点root中
+
+            nodeUrl.appendChild(nodeLoc)
+            nodeUrl.appendChild(nodeLastmod)
+            root.appendChild(nodeUrl)
+
+        #开始写xml文档,"w+",打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
+        fp = open('c:\\usestudioxml\\sitemap1.xml', 'w+')
+
+        #写入XML头,类似<?xml version="1.0" encoding="utf-8"?>
+        #indent='\t' 指第一个urlset的空格个数   addindent='\t'为后面的元素的空格间距。
+
+        #doc.writexml(fp, indent='\t', addindent='\t', newl='\n', encoding="utf-8")
+        doc.writexml(fp, addindent='    ', newl='\n', encoding="utf-8")
+
+_ux=UsestudioXML()
+_ux.apiSitemap()
+_ux.apiXML()
+