python正则表达式抓取成语网站


Posted in Python onNovember 20, 2013

1、首先找到一个在线成语网站

2、查看网页结构,定义正则式

看一下要抓的成语的标签有什么特点,查看源码,可以发现要抓的成语都在<a>标签中,如:<a href="/cy0/93.html">安如磐石</a>,成语事实上就是一个瞄文本,不同成语指向的链接不同,其实也就"/cy0/93.html"中的数字不同,所以正则式里匹配两次数字就行了,定义正则式 reg =   "<a href=\"/cy(\d+)/(\d+).html\">(.*?)</a>"。
3、上代码吧

#anthor jiqunpeng
#time 20121124
import urllib
import re
def getHtml(url): #从URL中读取html内容
    page = urllib.urlopen(url) 
    html = page.read() 
    page.close() 
    return html
def getDictionary(html): #匹配成语
    reg = "<a href=\"/cy(\d+)/(\d+).html\">(.*?)</a>"   
    dicList = re.compile(reg).findall(html)
    return dicList
def getItemSite():#手工把每个字母开头的页面数统计下来
    itemSite = {}#申明为空字典
    itemSite["A"] = 3
    itemSite["B"] = 21
    itemSite["C"] = 19
    itemSite["D"] = 18
    itemSite["E"] = 2
    itemSite["F"] = 14
    itemSite["G"] = 13
    itemSite["H"] = 15
    itemSite["J"] = 23
    itemSite["K"] = 6
    itemSite["L"] = 15
    itemSite["M"] = 12
    itemSite["N"] = 5
    itemSite["O"] = 1
    itemSite["P"] = 6
    itemSite["Q"] = 16
    itemSite["R"] = 8
    itemSite["S"] = 26
    itemSite["T"] = 12
    itemSite["W"] = 13
    itemSite["X"] = 16
    itemSite["Y"] = 35
    itemSite["A"] = 21
    return itemSite
    
if __name__== "__main__":
    dicFile = open("dic.txt","w+")#保存成语的文件
    domainsite = "http://chengyu.itlearner.com/list/"
    itemSite = getItemSite()
    for key,values in itemSite.items():
        for index in range(1,values+1):
            site = key +"_"+str(index)+".html"              
            dictionary = getDictionary(getHtml(domainsite+site))
            for dic in dictionary:
                dicFile.write(dic[2]+"@@CY\n")#标记为成语,分词时使用
        print key+'字母成语抓取完毕'        
    dicFile.close()    
    print '全部成语抓取完毕'

把成语保存在了txt文本中,还添加了一个后缀标签。
最后注意,设计正则表达式时可能会出现明明认为是正确的,就是匹配不了,对空白字符要留意,比如说要解析:

<div class="avatar_name">
                <a href="/u/kkun/" title="kkun">kkun</a>
            </div>

你看不出第一行与第二行的空白字符是什么,可以index = html.find('avatar_name'),html[4677:4677+100]看到非空白字符。

Python 相关文章推荐
Django项目实战之用户头像上传与访问的示例
Apr 21 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
Jun 28 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 Python
如何基于Python创建目录文件夹
Dec 31 Python
Python request使用方法及问题总结
Apr 26 Python
python能在浏览器能运行吗
Jun 17 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
浅析Python 责任链设计模式
Sep 11 Python
python中如何使用虚拟环境
Oct 14 Python
python 使用tkinter+you-get实现视频下载器
Nov 17 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 Python
python爬取网站数据保存使用的方法
Nov 20 #Python
使用python搭建Django应用程序步骤及版本冲突问题解决
Nov 19 #Python
python解析json实例方法
Nov 19 #Python
python聊天程序实例代码分享
Nov 18 #Python
python实现系统状态监测和故障转移实例方法
Nov 18 #Python
python线程池的实现实例
Nov 18 #Python
python批量导出导入MySQL用户的方法
Nov 15 #Python
You might like
php+mysql查询优化简单实例
2015/01/13 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
jquery easyui滚动条部分设置介绍
2013/09/12 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
详解vue-router基本使用
2017/04/18 Javascript
vue绑定设置属性的多种方式(5)
2017/08/16 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
使用 Node.js 模拟滑动拼图验证码操作的示例代码
2017/11/02 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
Python实现带百分比的进度条
2016/06/28 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python判断telnet通不通的实例
2019/01/26 Python
PyQt中使用QtSql连接MySql数据库的方法
2020/07/28 Python
python 密码学示例——理解哈希(Hash)算法
2020/09/21 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
加拿大便宜的隐形眼镜商店:Clearly
2016/09/15 全球购物
可打印的优惠券、杂货和优惠券代码:Coupons.com
2018/06/12 全球购物
土木工程毕业生推荐信
2013/10/28 职场文书
工程师岗位职责
2013/11/08 职场文书
技术合作协议书范本
2014/04/18 职场文书
2014年政务公开工作总结
2014/12/09 职场文书
具结保证书
2015/01/17 职场文书
工作简报范文
2015/07/21 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python
Node.js实现断点续传
2021/06/23 Javascript
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js
Win10多屏显示如何设置?Win10电脑多屏显示设置操作方法
2022/07/07 数码科技