第2个爬虫教程的大坑,关于正则表达式的括号与竖线
来源:互联网 发布:mac上打卡文件 编辑:程序博客网 时间:2024/05/21 06:24
Python实战:Python爬虫学习教程,获取电影排行榜
=======================割====================================
我们可以看到我们想要的热搜的内容都是如下结构:
<a target="_blank" title="标题" data="26|26" class="list-title" href="链接" href_top="说明">电影名称</a>
所以我们就可以按照如上内容写正则表达式,然后在html源代码中匹配出来电影名称就可以了
我们正则表达式可以这样写
<a target="_blank" title=".+?" data="26|26" class="list-title" href=".+?" href_top=".*?">.*?</a>
=======================割====================================
此外,在个人调试中,也发现了竖线需要加转义字符反斜杠。
可以参见:
Python爬虫实战一之爬取糗事百科段子
http://cuiqingcai.com/990.html=======================割====================================
我们可以看到,每一个段子都是<div class=”article block untagged mb15″ id=”…”>…</div>包裹的内容。
现在我们想获取发布人,发布日期,段子内容,以及点赞的个数。不过另外注意的是,段子有些是带图片的,如果我们想在控制台显示图片是不现实的,所以我们直接把带有图片的段子给它剔除掉,只保存仅含文本的段子。
所以我们加入如下正则表达式来匹配一下,用到的方法是 re.findall 是找寻所有匹配的内容。方法的用法详情可以看前面说的正则表达式的介绍。
好,我们的正则表达式匹配语句书写如下,在原来的基础上追加如下代码
content = response.read().decode('utf-8')
pattern = re.compile('<div.*?author">.*?<a.*?<img.*?>(.*?)</a>.*?<div.*?'+
'content">(.*?)<!--(.*?)-->.*?</div>(.*?)<div class="stats.*?class="number">(.*?)</i>',re.S)
items = re.findall(pattern,content)
for item in items:
print item[0],item[1],item[2],item[3],item[4]
1).*? 是一个固定的搭配,.和*代表可以匹配任意无限多个字符,加上?表示使用非贪婪模式进行匹配,也就是我们会尽可能短地做匹配,以后我们还会大量用到 .*? 的搭配。
2)(.*?)代表一个分组,在这个正则表达式中我们匹配了五个分组,在后面的遍历item中,item[0]就代表第一个(.*?)所指代的内容,item[1]就代表第二个(.*?)所指代的内容,以此类推。
3)re.S 标志代表在匹配时为点任意匹配模式,点 . 也可以代表换行符。
这样我们就获取了发布人,发布时间,发布内容,附加图片以及点赞数。
- 第2个爬虫教程的大坑,关于正则表达式的括号与竖线
- 第一个爬虫教程的大坑,关于for循环打印字符串列表
- 竖线与正则表达式
- tomcat6关于el表达式的一大坑!
- 正则表达式 - JAVA按"|"(竖线)分隔字符串,但忽略"/|"(转义的竖线)
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- 正则表达式(括号)、[中括号]、{大括号}的区别小结
- Django 操作Mysql数据库 对表进行增删改查
- 学习opencv——背景减除
- java并发编程中的一些理解
- 树
- 全面了解 Nginx 主要应用场景
- 第2个爬虫教程的大坑,关于正则表达式的括号与竖线
- JVM学习03-内存管理和垃圾回收04(之GC算法 垃圾收集器)
- HDU:1501 Zipper(DFS+剪枝)
- 点击导航栏切换页面的几种方式
- 多线程详细解析(一) 创建线程
- 1041. 考试座位号
- task
- android开发常见工具及插件
- QEvent