python的re.findall匹配中文出现问题

diovid 2015-12-23 06:21:18


匹配一个网页里面的一些内容 但出现这种问题 初学python 麻烦指教一下

还有一个问题 然后我匹配出来是一个列表 如何去除每个元素的中指定的字符

如['aaaaaex' ,'vvvvvvvvvvvvex','sssssssssssex'] 如何去除每个元素的'ex'。。谢谢
...全文
2965 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bug吃集 2017-12-12
  • 打赏
  • 举报
回复
fileO = open("/Users/potter/PycharmProjects/searchString/sp/123.txt","r") all_utf = fileO.read().decode("utf-8") # print all_text # print all_utf names = re.findall(ur'@"(\w*[\u4e00-\u9fa5]*)"',all_utf, re.I)
diovid 2015-12-25
  • 打赏
  • 举报
回复
引用 16 楼 pcboyxhy 的回复:
import datetime
import time
import urllib

while True:
    for a in ['飞机', '火车', '汽车', '轮船']:
        url = r'http://ss.gkstk.com/cse/search?q='+a+r'&click=1&s=11259993741189624235' 
        req = urllib.urlopen(url)
        print datetime.datetime.now(), a, len(req.read())
        req.close()
2015-12-25 10:16:22.498518 飞机 38770
2015-12-25 10:16:22.754490 火车 39765
2015-12-25 10:16:23.016036 汽车 39371
2015-12-25 10:16:23.260760 轮船 38874
2015-12-25 10:16:23.498307 飞机 38770
2015-12-25 10:16:23.765754 火车 39765
2015-12-25 10:16:24.050302 汽车 39371
2015-12-25 10:16:24.328333 轮船 38874
2015-12-25 10:16:24.583839 飞机 38770
2015-12-25 10:16:24.882681 火车 39765
2015-12-25 10:16:25.180508 汽车 39371
2015-12-25 10:16:25.496497 轮船 38874
2015-12-25 10:16:25.771734 飞机 38770
2015-12-25 10:16:26.001684 火车 39765
2015-12-25 10:16:26.235687 汽车 39371
2015-12-25 10:16:26.469926 轮船 38874
2015-12-25 10:16:26.754045 飞机 38770
2015-12-25 10:16:27.160544 火车 39765
2015-12-25 10:16:27.399948 汽车 39371
2015-12-25 10:16:27.656756 轮船 38874
2015-12-25 10:16:27.897737 飞机 38770
2015-12-25 10:16:28.163222 火车 39765
2015-12-25 10:16:28.445390 汽车 39371
2015-12-25 10:16:28.676750 轮船 38874
2015-12-25 10:16:28.914525 飞机 38770
2015-12-25 10:16:29.180840 火车 39765
2015-12-25 10:16:29.420131 汽车 39371
2015-12-25 10:16:29.726095 轮船 38874
2015-12-25 10:16:29.967524 飞机 38770
2015-12-25 10:16:30.205105 火车 39765
2015-12-25 10:16:30.507945 汽车 39371
2015-12-25 10:16:30.822356 轮船 38874
2015-12-25 10:16:31.114813 飞机 38770
2015-12-25 10:16:31.423173 火车 39765
2015-12-25 10:16:31.713391 汽车 39371
2015-12-25 10:16:32.008701 轮船 38874
2015-12-25 10:16:32.275053 飞机 38770
2015-12-25 10:16:32.521600 火车 39765
2015-12-25 10:16:32.798019 汽车 39371
2015-12-25 10:16:33.099540 轮船 38874
2015-12-25 10:16:33.362301 飞机 38770
2015-12-25 10:16:33.610782 火车 39765
2015-12-25 10:16:33.904479 汽车 39371
2015-12-25 10:16:34.184339 轮船 38874
2015-12-25 10:16:34.422873 飞机 38770
2015-12-25 10:16:34.714822 火车 39765
2015-12-25 10:16:34.986098 汽车 39371
2015-12-25 10:16:35.228974 轮船 38874
2015-12-25 10:16:35.480587 飞机 38770
2015-12-25 10:16:35.720192 火车 39765
2015-12-25 10:16:36.017358 汽车 39371
2015-12-25 10:16:36.314360 轮船 38874
2015-12-25 10:16:36.553009 飞机 38770
2015-12-25 10:16:36.800480 火车 39765
我用你的代码在我电脑也会中段
>>> 
2015-12-25 10:32:22.407000 飞机 38766
2015-12-25 10:32:22.879000 火车
请问这是电脑哪里出问题了 应该不是代码问题了。
pcboyxhy 2015-12-25
  • 打赏
  • 举报
回复
import datetime
import time
import urllib

while True:
    for a in ['飞机', '火车', '汽车', '轮船']:
        url = r'http://ss.gkstk.com/cse/search?q='+a+r'&click=1&s=11259993741189624235' 
        req = urllib.urlopen(url)
        print datetime.datetime.now(), a, len(req.read())
        req.close()
2015-12-25 10:16:22.498518 飞机 38770
2015-12-25 10:16:22.754490 火车 39765
2015-12-25 10:16:23.016036 汽车 39371
2015-12-25 10:16:23.260760 轮船 38874
2015-12-25 10:16:23.498307 飞机 38770
2015-12-25 10:16:23.765754 火车 39765
2015-12-25 10:16:24.050302 汽车 39371
2015-12-25 10:16:24.328333 轮船 38874
2015-12-25 10:16:24.583839 飞机 38770
2015-12-25 10:16:24.882681 火车 39765
2015-12-25 10:16:25.180508 汽车 39371
2015-12-25 10:16:25.496497 轮船 38874
2015-12-25 10:16:25.771734 飞机 38770
2015-12-25 10:16:26.001684 火车 39765
2015-12-25 10:16:26.235687 汽车 39371
2015-12-25 10:16:26.469926 轮船 38874
2015-12-25 10:16:26.754045 飞机 38770
2015-12-25 10:16:27.160544 火车 39765
2015-12-25 10:16:27.399948 汽车 39371
2015-12-25 10:16:27.656756 轮船 38874
2015-12-25 10:16:27.897737 飞机 38770
2015-12-25 10:16:28.163222 火车 39765
2015-12-25 10:16:28.445390 汽车 39371
2015-12-25 10:16:28.676750 轮船 38874
2015-12-25 10:16:28.914525 飞机 38770
2015-12-25 10:16:29.180840 火车 39765
2015-12-25 10:16:29.420131 汽车 39371
2015-12-25 10:16:29.726095 轮船 38874
2015-12-25 10:16:29.967524 飞机 38770
2015-12-25 10:16:30.205105 火车 39765
2015-12-25 10:16:30.507945 汽车 39371
2015-12-25 10:16:30.822356 轮船 38874
2015-12-25 10:16:31.114813 飞机 38770
2015-12-25 10:16:31.423173 火车 39765
2015-12-25 10:16:31.713391 汽车 39371
2015-12-25 10:16:32.008701 轮船 38874
2015-12-25 10:16:32.275053 飞机 38770
2015-12-25 10:16:32.521600 火车 39765
2015-12-25 10:16:32.798019 汽车 39371
2015-12-25 10:16:33.099540 轮船 38874
2015-12-25 10:16:33.362301 飞机 38770
2015-12-25 10:16:33.610782 火车 39765
2015-12-25 10:16:33.904479 汽车 39371
2015-12-25 10:16:34.184339 轮船 38874
2015-12-25 10:16:34.422873 飞机 38770
2015-12-25 10:16:34.714822 火车 39765
2015-12-25 10:16:34.986098 汽车 39371
2015-12-25 10:16:35.228974 轮船 38874
2015-12-25 10:16:35.480587 飞机 38770
2015-12-25 10:16:35.720192 火车 39765
2015-12-25 10:16:36.017358 汽车 39371
2015-12-25 10:16:36.314360 轮船 38874
2015-12-25 10:16:36.553009 飞机 38770
2015-12-25 10:16:36.800480 火车 39765
diovid 2015-12-25
  • 打赏
  • 举报
回复
引用 14 楼 pcboyxhy 的回复:
[quote=引用 13 楼 diovid 的回复:] [quote=引用 12 楼 pcboyxhy 的回复:] [quote=引用 11 楼 diovid 的回复:] [quote=引用 10 楼 pcboyxhy 的回复:]
content = req.read()
req.close()
改成这样呢
还是不可以哦 测试了几次都是第二次搜索就出不来了。 urllib改成urllib2 就可以多几次 然后后面也一样卡住。。。[/quote] 这跟被抓取的网站的限制策略有关,有的网站甚至会分析用户行为,屏蔽掉抓取[/quote]但是我手动直接访问很多次同样的Url 也不会出现什么异常呀 = [/quote] 把抓取部分的代码抠出贴上来[/quote]
    a=raw_input('   搜索:')
    print '\n'
    url=r'http://ss.gkstk.com/cse/search?q='+a+r'&click=1&s=11259993741189624235' 
    req = urllib2.urlopen(url)
pcboyxhy 2015-12-25
  • 打赏
  • 举报
回复
引用 13 楼 diovid 的回复:
[quote=引用 12 楼 pcboyxhy 的回复:] [quote=引用 11 楼 diovid 的回复:] [quote=引用 10 楼 pcboyxhy 的回复:]
content = req.read()
req.close()
改成这样呢
还是不可以哦 测试了几次都是第二次搜索就出不来了。 urllib改成urllib2 就可以多几次 然后后面也一样卡住。。。[/quote] 这跟被抓取的网站的限制策略有关,有的网站甚至会分析用户行为,屏蔽掉抓取[/quote]但是我手动直接访问很多次同样的Url 也不会出现什么异常呀 = [/quote] 把抓取部分的代码抠出贴上来
diovid 2015-12-25
  • 打赏
  • 举报
回复
引用 12 楼 pcboyxhy 的回复:
[quote=引用 11 楼 diovid 的回复:] [quote=引用 10 楼 pcboyxhy 的回复:]
content = req.read()
req.close()
改成这样呢
还是不可以哦 测试了几次都是第二次搜索就出不来了。 urllib改成urllib2 就可以多几次 然后后面也一样卡住。。。[/quote] 这跟被抓取的网站的限制策略有关,有的网站甚至会分析用户行为,屏蔽掉抓取[/quote]但是我手动直接访问很多次同样的Url 也不会出现什么异常呀 =
pcboyxhy 2015-12-25
  • 打赏
  • 举报
回复
引用 11 楼 diovid 的回复:
[quote=引用 10 楼 pcboyxhy 的回复:]
content = req.read()
req.close()
改成这样呢
还是不可以哦 测试了几次都是第二次搜索就出不来了。 urllib改成urllib2 就可以多几次 然后后面也一样卡住。。。[/quote] 这跟被抓取的网站的限制策略有关,有的网站甚至会分析用户行为,屏蔽掉抓取
diovid 2015-12-25
  • 打赏
  • 举报
回复
引用 10 楼 pcboyxhy 的回复:
content = req.read()
req.close()
改成这样呢
还是不可以哦 测试了几次都是第二次搜索就出不来了。 urllib改成urllib2 就可以多几次 然后后面也一样卡住。。。
pcboyxhy 2015-12-24
  • 打赏
  • 举报
回复
引用 5 楼 diovid 的回复:
谢谢你的回复 打扰下大神 还有个问题 为什么软件运行的第一次 搜索速度很快 而且能匹配出来 因为我写了while:True 但是第二次或者后面的时候基本我输入东西后 他就不动了 后面都不执行了 请问是我哪里出问题了。 url没问题 然后正则也没问题。
while True:
    a=raw_input('   搜索:')
    print '\n'
    url=r'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    
    content = urllib.urlopen(url).read()
    
    list = re.findall(r"margin:0px 0;'>\s+(.*?)</div>",content)
    for i in range(len(list)):
        list[i]=list[i].replace(r'</em>',"").replace(r'<em>',"").replace(r'...',"")
        print list[i],'\n'
    print '   ==================================结束==================================\n'
在content = ...的前后输出log,看一下是不是卡在根据url取网页这一步了。还有就是list这样的name不要覆盖掉,变量不要用这种名字
diovid 2015-12-24
  • 打赏
  • 举报
回复
谢谢你的回复 打扰下大神 还有个问题

为什么软件运行的第一次 搜索速度很快 而且能匹配出来

因为我写了while:True

但是第二次或者后面的时候基本我输入东西后 他就不动了 后面都不执行了 请问是我哪里出问题了。

url没问题 然后正则也没问题。

while True:
a=raw_input(' 搜索:')
print '\n'
url=r'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

content = urllib.urlopen(url).read()

list = re.findall(r"margin:0px 0;'>\s+(.*?)</div>",content)
for i in range(len(list)):
list[i]=list[i].replace(r'</em>',"").replace(r'<em>',"").replace(r'...',"")
print list[i],'\n'
print ' ==================================结束==================================\n'
pcboyxhy 2015-12-24
  • 打赏
  • 举报
回复
re.search(r"margin:0px 0;'>\s+(.*?)</div>",
解析html最好用lxml或者beautifulsoup,别自己用正则去匹配
diovid 2015-12-24
  • 打赏
  • 举报
回复




想请问下 为什么在线正则测试就匹配的出来 而python则取不出来

正则为:re.match(r"margin:0px 0;'>\r\n (.*?)</div>",content)

以下为content内容

<div>
<div class="c-content">
<div class="c-abstract" style='font-family:Arial,SimSun,sans-serif;font-size:13px;color:#000000;
margin:0px 0;'>
6.公安消防队扑救火灾, ( A )<em>向发生火灾的单位</em>、<em>个人收取费用</em>。 A.不得 B.可以 C.按照一定标准 7.使用然气灶具时,( B )。 ... </div>
diovid 2015-12-24
  • 打赏
  • 举报
回复




想请问下 为什么在线正则测试就匹配的出来 而python则取不出来

正则为:re.match(r"margin:0px 0;'>\r\n (.*?)</div>",content)

以下为content内容

<div>
<div class="c-content">
<div class="c-abstract" style='font-family:Arial,SimSun,sans-serif;font-size:13px;color:#000000;
margin:0px 0;'>
6.公安消防队扑救火灾, ( A )<em>向发生火灾的单位</em>、<em>个人收取费用</em>。 A.不得 B.可以 C.按照一定标准 7.使用然气灶具时,( B )。 ... </div>
pcboyxhy 2015-12-24
  • 打赏
  • 举报
回复
content = req.read()
req.close()
改成这样呢
diovid 2015-12-24
  • 打赏
  • 举报
回复
引用 8 楼 pcboyxhy 的回复:
 
print "AAAA"
req =  urllib.urlopen(url)
print "BBBB"
content = req.read()
print "CCCC"
改成这样,看看是哪一步卡住了
输出BBB就卡住了 这是为什么呢 我直接在网页访问多次也没不会出现什么异常呀 。
pcboyxhy 2015-12-24
  • 打赏
  • 举报
回复
 
print "AAAA"
req =  urllib.urlopen(url)
print "BBBB"
content = req.read()
print "CCCC"
改成这样,看看是哪一步卡住了
diovid 2015-12-24
  • 打赏
  • 举报
回复
引用 6 楼 pcboyxhy 的回复:
[quote=引用 5 楼 diovid 的回复:] 谢谢你的回复 打扰下大神 还有个问题 为什么软件运行的第一次 搜索速度很快 而且能匹配出来 因为我写了while:True 但是第二次或者后面的时候基本我输入东西后 他就不动了 后面都不执行了 请问是我哪里出问题了。 url没问题 然后正则也没问题。
while True:
    a=raw_input('   搜索:')
    print '\n'
    url=r'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
    
    content = urllib.urlopen(url).read()
    
    list = re.findall(r"margin:0px 0;'>\s+(.*?)</div>",content)
    for i in range(len(list)):
        list[i]=list[i].replace(r'</em>',"").replace(r'<em>',"").replace(r'...',"")
        print list[i],'\n'
    print '   ==================================结束==================================\n'
在content = ...的前后输出log,看一下是不是卡在根据url取网页这一步了。还有就是list这样的name不要覆盖掉,变量不要用这种名字[/quote]前面那个没学到。。list改了还是那样 就两次可以正常输出结果 第三次就没反应 可以给个联系方式吗?
  • 打赏
  • 举报
回复
列表形式里 中文是以两个字节编码的形式出现的 所以你打印列表是显示这样的值 你可以尝试遍历列表 用print输出 就可以看到中文了 去掉ex的方法很多 比如可以调用replace() 把‘ex’换成‘’空字符串

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧