设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 9388|回复: 8
打印 上一主题 下一主题

匹配中文字符

[复制链接]

7

主题

0

好友

127

积分

注册会员

Rank: 2

跳转到指定楼层
楼主
发表于 2016-11-19 18:00:35 |只看该作者 |倒序浏览
我在网上看到爬取百度贴吧的内容,自己写了一个:
其中:我想匹配:见附件一
我只能匹配出数字,不能匹配出汉子字符,搜索了半天,还是不行。
一下是匹配出数字的正则表达式:
  1.          
  2.     def getReply(self):
  3.         reply = self.getPage(1)
  4.         pattern = re.compile('<li class="l_reply_num".*?<span.*?>(.*?)</span>.*?>(.*?)</span>',re.S)
  5.         result = re.search(pattern, reply)
  6.         if result:
  7.             print result.group(1)


复制代码
这是我要爬取的网页地址:http://tieba.baidu.com/p/4558066833
对应的代码:见附件二


请问,我需要怎样做,才能匹配出:***回复贴,共**页  这种样式?
谢谢!

附件一.png (3.35 KB, 下载次数: 238)

附件一.png

附件二.png (16.99 KB, 下载次数: 245)

附件二.png

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2016-11-19 23:39:44 |只看该作者
  1. '<li class="l_reply_num".*?<span.*?>(.*?)</span>(.*?)<span.*?>(.*?)</span>'
复制代码
或者你直接手动加上这几个文字,反正都是固定值
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

9

主题

0

好友

133

积分

注册会员

Rank: 2

板凳
发表于 2016-11-21 08:50:05 |只看该作者
本帖最后由 hymyg 于 2016-11-21 08:52 编辑
  1. r'\b+回复贴,共\b+页'
复制代码
\b  匹配0-9的数字

+  匹配一个或多个字符

\b+  匹配一个或多个数字
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2016-11-21 14:49:14 |只看该作者
hymyg 发表于 2016-11-21 08:50
\b  匹配0-9的数字

+  匹配一个或多个字符

数字是 \d
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

7

主题

0

好友

127

积分

注册会员

Rank: 2

5#
发表于 2016-11-21 17:04:46 |只看该作者
crossin先生 发表于 2016-11-21 14:49
数字是 \d

直接加上,简单粗暴。6666!
回复

使用道具 举报

7

主题

0

好友

127

积分

注册会员

Rank: 2

6#
发表于 2016-11-21 17:11:12 |只看该作者
本帖最后由 Tony 于 2016-11-21 17:12 编辑

那这种呢?


代码如下:
  1. import urllib2
  2. import time
  3. import re
  4. class Page:
  5. def getTotalPageNum(self,url):
  6.         print self.getCurrentTime(),"正在获取目录页面个数,请稍候"
  7.         page = self.getPageByURL(url)
  8.         #匹配所有的页码数,\u4e0b\u4e00\u9875是下一页的UTF8编码
  9.         pattern = re.compile('<span>.*?<a class="more" style>.*?<a href.*?>(.*?)</a>', re.S)
  10.         match = re.search(pattern, page)
  11.         if match:
  12.             print match.group(1)
  13.             
  14.         else:
  15.             print self.getCurrentTime(),"获取总页码失败"


  16. page_1 = Page()
  17. page_1.getTotalPageNum(page_url)


  18. 需要爬取的地址:http://iask.sina.com.cn/c/83-all-1-new.html
复制代码
我写的正则不对,没有找出来,看了半天。都不知道是哪里出了问题。
谢谢!

爬新浪知识.png (35.51 KB, 下载次数: 206)

爬新浪知识.png

爬新浪知识_2.png (2.33 KB, 下载次数: 227)

爬新浪知识_2.png

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2016-11-22 14:39:39 |只看该作者
Tony 发表于 2016-11-21 17:11
那这种呢?

你去看网页源代码,不要看 elements 里面的代码,这里面是浏览器优化过的
所以导致你写的匹配规则不对。我看到的是 style=""
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

9

主题

0

好友

133

积分

注册会员

Rank: 2

8#
发表于 2016-11-23 08:55:08 |只看该作者
crossin先生 发表于 2016-11-21 14:49
数字是 \d

不好意思,笔误
回复

使用道具 举报

7

主题

0

好友

127

积分

注册会员

Rank: 2

9#
发表于 2016-11-23 13:33:52 |只看该作者
hymyg 发表于 2016-11-23 08:55
不好意思,笔误

对了,成功了,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-2 07:29 , Processed in 0.031108 second(s), 28 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部