用python写的一个wordpress的采集程序


Posted in Python onFebruary 27, 2016

在学习python的过程中,经过不断的尝试及努力,终于完成了第一个像样的python程序,虽然还有很多需要优化的地方,但是目前基本上实现了我所要求的功能,先贴一下程序代码:

用python写的一个wordpress的采集程序

具体代码如下:

#! /usr/bin/python
 import os,urllib2,re,time,MySQLdb,sys
 reTitle          = re.compile('<font[^>]*>(.*?)<\/font><font[^>]*')
 reNeiron         = re.compile('[1-9|A-Z|a-z].*')
 retiqu          = re.compile('^(?!MARGINWIDTH|BR).*.[^>|}]$')
 rezhong          = re.compile('^[^[].*')
 shijian=1190944000
 Str1="\\n---------------- BLOG OF YAO"
 bianhao=2859
 for i in range(1,1500):
     Str2=""
     ltime=time.localtime(shijian)
     timeStr=time.strftime("%Y%m%d",ltime)
     url="http://www.jokeswarehouse.com/cgi-bin/viewjoke2.cgi?id=%s" %timeStr
     print url
     a=urllib2.urlopen(url).read()
     Title=reTitle.findall(a)
     print "=========================================================================================================="
     for titles in map(None,Title):
         titles=MySQLdb.escape_string(titles)
         print titles
     Neiron=re.findall(reNeiron,a)
     for i in map(None,Neiron):
         x=re.findall(retiqu,i)
         for str in x:
             str=MySQLdb.escape_string(str)
             Str2 += str+"\\n"
     shijian += 86400
     bianhao += 1
     try:
         conn=MySQLdb.connect("XXXX.XXXX.XXXX.XXXX","user","passwd","dbname",charset="utf8", init_command="set names utf8")
     except MySQLdb.OperationalError,message:
         print "like error"
     cursor=conn.cursor()
     sql="INSERT INTO wp_posts (post_author,post_date,post_date_gmt,post_content,post_content_filtered,post_title,post_excerpt,post_status,post_type,comment_status,ping_status,post_password,post_name,to_ping,pinged,post_modified,post_modified_gmt,post_parent,menu_order,guid) VALUES (\'1\',\'2011-06-01 22:12:25\',\'2011-05-09 04:12:25\',\'\',\'\',\'Auto Draft\',\'\',\'inherit\',\'revision\',\'open\',\'open\',\'\',\'100-revision\',\'\',\'\',\'2011-06-01 22:12:25\',\'2011-05-09 04:12:25\',\'%s\',\'0\',\'\')" %bianhao
     sql2="UPDATE wp_posts SET post_author = 1, post_date = \'2011-06-01 22:12:25\', post_date_gmt = \'2011-06-01 22:12:25\', post_content =\'%s\', post_content_filtered = \'\', post_title = \'%s\', post_excerpt = \'\', post_status = \'publish\', post_type = \'post\', comment_status = \'open\', ping_status = \'open\', post_password = \'\', post_name = \'%s\', to_ping = \'\', pinged = \'\', post_modified = \'2011-06-01 22:12:25\', post_modified_gmt = \'2011-05-09 04:12:30\', post_parent = 0, menu_order = 0, guid = \'http://www.moncleronlineshops.com/?p=%s\' WHERE ID = %s" %(Str2,titles,titles,bianhao,bianhao)
     cursor.execute(sql)
     cursor.execute(sql2)
     cursor.close()
     conn.close()
     sys.exit()

下面,我们来给代码加些注释,让读者能看的更明白一些,如下:

具体代码如下

#! /usr/bin/python
 import os,urllib2,re,time,MySQLdb,sys #加载本程序需要调用的相模块
reTitle          = re.compile('<font[^>]*>(.*?)<\/font> <font[^>]*') # 定义一下取文章标题的正则
reNeiron         = re.compile('[1-9|A-Z|a-z].*') 
 #定义一个取提取文章内容的正则(注:这里提取出来的不是很精细,需要在下面的正则里,再进行提取,这里只是取一个大概)
retiqu          = re.compile('^(?!MARGINWIDTH|BR).*.[^>|}]$')
 #这里定义一个正则,将上面reNeiron提取出来的字符,再进行细化。

shijian=1190944000  #这里字义了一个时间戳,
Str1="\\n---------------- BLOG OF YAO" #这个没用,开始是准备加到文章里的,后来没加进去。
bianhao=2859   #这里是wordpress 的文章编号,直接查看wp-posts表的id 字段的最后一个数字。

for i in range(1,1500): #循环1500遍,也就是采集1500篇文章。
    Str2="" #先赋值给Str2 空值
    ltime=time.localtime(shijian)  
     timeStr=time.strftime("%Y%m%d",ltime) #这两句将上面的时间戳改为时间,样式为19700101这样的格式
    url="http://www.jokeswarehouse.com/cgi-bin/viewjoke2.cgi?id=%s" %timeStr #定义要采集的网站,将转化后的时间放在这个url的最后。
    a=urllib2.urlopen(url).read() #将这个网页的源代码读出来,赋值给a;
     Title=reTitle.findall(a)
 #使用 reTitle这个正则提取出标题
    print "=========================================================================================================="
     for titles in map(None,Title): #上面提取出来的标题前后都有一个 [] 
所以我们要写个for循环把前后的[]去掉,并转义成能直接插入mysql库的格式。
        titles=MySQLdb.escape_string(titles)
     Neiron=re.findall(reNeiron,a) #先用reNeiron,取个大概的内容模型出来。这些都是以逗号分隔的数组。
    for i in map(None,Neiron): # 我们来循环读出Neiron这个数组里的每个值。
        x=re.findall(retiqu,i)#并用 retiqu这个正则提出精细出的内容。
        for str in x:
             str=MySQLdb.escape_string(str)
             Str2 += str+"\\n"
 #利用这个循环,我们把内容加到一起,并赋值给Str2这个变量,这个 Str2这个变量就是所有的文章内容。
    shijian += 86400 #每循环一次,就把shijian这个变量加上一天。
    bianhao += 1   #每循环一次,就把bianhao这个变量加上一
    try:
 #下面是用mysqldb连接数据库,并尝试连接是否成功。       conn=MySQLdb.connect("XXXX.XXXX.XXXX.XXXX","user","passwd","dbname",charset="utf8", init_command="set names utf8")
     except MySQLdb.OperationalError,message:
         print "like error"
     cursor=conn.cursor()
 #下面是插入wordpress数据库的两条语句,我是从mysqlbinlog里面导出来的,测试是可以插入数据库,并能正常把内容显示在网页的。变量都写在这两条语句里。
    sql="INSERT INTO wp_posts (post_author,post_date,post_date_gmt,post_content,post_content_filtered,post_title,post_excerpt,post_status,post_type,comment_status,ping_status,post_password,post_name,to_ping,pinged,post_modified,post_modified_gmt,post_parent,menu_order,guid) VALUES (\'1\',\'2011-06-01 22:12:25\',\'2011-05-09 04:12:25\',\'\',\'\',\'Auto Draft\',\'\',\'inherit\',\'revision\',\'open\',\'open\',\'\',\'100-revision\',\'\',\'\',\'2011-06-01 22:12:25\',\'2011-05-09 04:12:25\',\'%s\',\'0\',\'\')" %bianhao
     sql2="UPDATE wp_posts SET post_author = 1, post_date = \'2011-06-01 22:12:25\', post_date_gmt = \'2011-06-01 22:12:25\', post_content =\'%s\', post_content_filtered = \'\', post_title = \'%s\', post_excerpt = \'\', post_status = \'publish\', post_type = \'post\', comment_status = \'open\', ping_status = \'open\', post_password = \'\', post_name = \'%s\', to_ping = \'\', pinged = \'\', post_modified = \'2011-06-01 22:12:25\', post_modified_gmt = \'2011-05-09 04:12:30\', post_parent = 0, menu_order = 0, guid = \'http://www.moncleronlineshops.com/?p=%s\' WHERE ID = %s" %(Str2,titles,titles,bianhao,bianhao)
     cursor.execute(sql)
     cursor.execute(sql2) #连接数据库并执行这两条语句。
    cursor.close()
     conn.close()  #关闭数据库。
    sys.exit()

上面是程序的代码,采集的是:www.jokeswarehouse.com 的一个笑话网站。通过 python 的 re 模块,也就是正则匹配模块,运行相应的正则表达式,进行过滤出我们所需要的标题和文章内容,再运用 python 的mysqldb 模块,进行连接数据库,利用相应的插入语句,进行插入数据库。

Python 相关文章推荐
编写Python脚本来获取mp3文件tag信息的教程
May 04 Python
Python使用django获取用户IP地址的方法
May 11 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
Python图像的增强处理操作示例【基于ImageEnhance类】
Jan 03 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
python爬虫增加访问量的方法
Aug 22 Python
python使用配置文件过程详解
Dec 28 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
Apr 16 Python
Python远程方法调用实现过程解析
Jul 28 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 Python
用Python selenium实现淘宝抢单机器人
Jun 18 Python
python结合shell查询google关键词排名的实现代码
Feb 27 #Python
python的else子句使用指南
Feb 27 #Python
Python实现简单多线程任务队列
Feb 27 #Python
如何在Python中编写并发程序
Feb 27 #Python
Python 多线程抓取图片效率对比
Feb 27 #Python
Python 的描述符 descriptor详解
Feb 27 #Python
简析Python的闭包和装饰器
Feb 26 #Python
You might like
用php和MySql来与ODBC数据连接
2006/10/09 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
TFDN图片播放器 不错自动播放
2006/10/03 Javascript
window.onload 加载完毕的问题及解决方案(下)
2009/07/09 Javascript
通过百度地图获取公交线路的站点坐标的js代码
2012/05/11 Javascript
判断js中各种数据的类型方法之typeof与0bject.prototype.toString讲解
2013/11/07 Javascript
JavaScript获得url所有参数键值表的方法
2015/03/21 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
js判断当前页面用什么浏览器打开的方法
2016/01/06 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
jquery仿京东商品放大浏览页面
2017/06/06 jQuery
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
vue 开发企业微信整合案例分析
2019/12/02 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
Python实现针对中文排序的方法
2017/05/09 Python
python使用两种发邮件的方式smtp和outlook示例
2017/06/02 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
Python基础之字典常见操作经典实例详解
2020/02/26 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
Python logging模块异步线程写日志实现过程解析
2020/06/30 Python
python利用platform模块获取系统信息
2020/10/09 Python
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
园长自我鉴定
2013/10/06 职场文书
机械系大学毕业生推荐信
2013/11/27 职场文书
西式婚礼证婚词
2014/01/12 职场文书
绿化工程实施方案
2014/03/17 职场文书
感恩之星事迹材料
2014/05/03 职场文书
销售岗位职责范本
2014/06/12 职场文书
党员学习中共十八大思想报告
2014/09/12 职场文书
会计工作能力自我评价
2015/03/05 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
python画条形图的具体代码
2022/04/20 Python