爬虫关于非规则html处理
来源:互联网 发布:天天饮食软件说明 编辑:程序博客网 时间:2024/06/05 10:38
html = r'''<div class=\"pagin pagin-m\"><span class=\"text\"><i>1</i>/25</span> <a href=\"?cat=670%2C671%2C672& page=1\" class=\"prev\">上一页<b></b></a><a href=\"? cat=670%2C671%2C672&page=2\" class=\"next\">下一页<b></b></a></div>'''
html为网页中解析出的一个div标签,需注意html双引号前的反斜杠转义符。html中r''''''表示了原始字符,此处若不用r'', 执行print操作是,会将反斜杠作为转义符处理。即:
<div class="pagin pagin-m"><span class="text"><i>1</i>/25</span> <a href="?cat=670%2C671%2C672& page=1" class="prev">上一页<b></b></a><a href="? cat=670%2C671%2C672&page=2" class="next">下一页<b></b></a></div>raw功能也就是让反斜杠失去转义功能
由于正则表达式使用反斜杠来转义特殊字符, 而python自身处理字符时,反斜杠也是用于转义,这里就产生了一个双重转换的问题。
第一重转换为字符串自身的转义,普通非原始字符串中'\\'(两个反斜杠)事实上只是一个反斜杠,第一个会被python当做转义字符来处理,倘若把‘\\’作为pattern传入re模块则会报错,因为单个反斜杠‘\’在python正则中同样也是用来转义的,也就是说,re.compile('\\')的写法是错误的,它等价于:re.compile(r'\')
第二重转义正则中的转换了,python正则中反斜杠是作为转义字符存在的,不再有raw字符串的说法了,如果要表示反斜杠只能是re.compile(r'\\'),第一个用来转义表明第二个反斜杠是元字符。
这里用两种方法来匹配出html的页码25
html = r'''<div class=\"pagin pagin-m\"><span class=\"text\"><i>1</i>/25</span> <a href=\"?cat=670%2C671%2C672& page=1\" class=\"prev\">上一页<b></b></a><a href=\"? cat=670%2C671%2C672&page=2\" class=\"next\">下一页<b></b></a></div>'''match = re.search('''<div class=\\\\"pagin pagin-m\\\\">.*/(\d+)</span>''', html)if match: print match.group(1)else: print match注意此处的re.search()并没有使用raw原始字符串,所以字符串中的四个反斜杠才被正则解析后就是一个了,字符串中的‘\\\\’,传到正则中时就变成了‘\\’,而正则中的这两个反斜杠第一个也被用来转义了。
输出为25
*****************************************************
re.search()使用raw字符串
html = r'''<div class=\"pagin pagin-m\"><span class=\"text\"><i>1</i>/25</span> <a href=\"?cat=670%2C671%2C672& page=1\" class=\"prev\">上一页<b></b></a><a href=\"? cat=670%2C671%2C672&page=2\" class=\"next\">下一页<b></b></a></div>'''match = re.search(r'''<div class=\\"pagin pagin-m\\">.*/(\d+)</span>''', html)if match: print match.group(1)else: print match输出为25
0 0
- 爬虫关于非规则html处理
- 关于HTML嵌套规则的思考
- selenium 拦截网站非ajax数据,爬虫处理js
- ARM处理器关于非对齐存储的访问规则
- Python爬虫处理xml和html的字符串
- 数据抓取之反爬虫规则:CSRF防御处理及异步请求处理
- 网络爬虫的规则
- 关于HTML语法规则你需要知道的
- xml中关于html代码的处理
- 14、关于获取html页面元素的非行间样式
- 关于HTML中的置换与非置换元素
- Linux文本处理:从不规则列/非固定列中截取关键字
- Linux文本处理:从不规则列/非固定列中截取关键字-方法2
- python#WS003 爬虫规则习题
- 网络爬虫规则(一)
- 网络爬虫规则(二)
- 创建爬虫-----爬虫异常处理:
- 关于非常规特殊字符在.net中的处理
- 割点和桥 poj1144
- 给出n个会议的起始时间和结束时间,如何快速计算是会议是否和其他会议有冲突?
- 用JIRA管理你的项目——(一)JIRA环境搭建
- Socket INADDR_ANY详解
- Android UI开发神兵利器之Android Action Bar Style Generator
- 爬虫关于非规则html处理
- winform Label与DataGridView右对齐
- 百度之星 1002 (动态规划,双调旅行商问题)
- 在控制台上输入一个字符串,将其中夹杂的字母去除,只剩数字,然后对对这些数字进行全排列,输出全排列结果
- C++替换方法和URL转义字符
- java学习对象笔记
- Mysql添加远程访问权限
- Add Binary
- 错误解析->“cvQueryHistValue_2D”: 找不到标识符