怎么写url的python正则表达式

vensenter 2014-07-04 07:24:04
"nlskf
<img data-ks-lazyload= "http://gi1.mlist.alicdn.com/bao/uploaded/i1/T1sk3BFtRgXXXXXXXX_!!0-item_pic.jpg_b.jpg" />

要求匹配到http://gi1.mlist.alicdn.com/bao/uploaded/i1/T1sk3BFtRgXXXXXXXX_!!0-item_pic.jpg_b.jpg
末尾以‘ />’结尾怎么匹配,因为有其他类型的url
...全文
161 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vensenter 2014-07-07
  • 打赏
  • 举报
回复
引用 8 楼 crifan 的回复:
引用
其中有四百张图片我只想要60张商品的图片
别人想要帮你的话,需要知道你此处确切的要去,即: 这400张图片中60张图片的url地址,有何规律。 你需要把需求描述的足够精确,这样别人才能给你写出足够精确方法。 对于你此处的问题,其中即可以用正则表达式,也可以用BeautifulSoup去解决。 在你没把你的需求描述清楚之前,没法给你答案。 但是可以给你思路: 可以参考: 【问题解答】建议:处理html时复杂的需求,建议使用专门的库比如BeautifulSoup去处理而不要用正则
有理,之前是规律没找正确,问题已解决,谢谢各位了!
crifan 2014-07-05
  • 打赏
  • 举报
回复
引用
其中有四百张图片我只想要60张商品的图片
别人想要帮你的话,需要知道你此处确切的要去,即: 这400张图片中60张图片的url地址,有何规律。 你需要把需求描述的足够精确,这样别人才能给你写出足够精确方法。 对于你此处的问题,其中即可以用正则表达式,也可以用BeautifulSoup去解决。 在你没把你的需求描述清楚之前,没法给你答案。 但是可以给你思路: 可以参考: 【问题解答】建议:处理html时复杂的需求,建议使用专门的库比如BeautifulSoup去处理而不要用正则
vensenter 2014-07-05
  • 打赏
  • 举报
回复
引用 6 楼 xmnathan 的回复:
其实不知道你特定的图片要求是什么 你还是得自己理解正则如何编写 才能找到最好方案
好吧,感觉还是有点不对我还是再研究看看,O(∩_∩)O谢谢了
  • 打赏
  • 举报
回复
其实不知道你特定的图片要求是什么 你还是得自己理解正则如何编写 才能找到最好方案
  • 打赏
  • 举报
回复
引用 4 楼 xmnathan 的回复:

import re
sketchyStrList = re.findall( r'''(?<=<img).+?(?=/>)''' , urlStr )

resultStrList = []
for sketchyStr in sketchyStrList:
    
    resultStrList += re.findall( r'''(?<=").+?(?=")''' , sketchyStr )

print resultStrList
第一正则取出所有<img ..... />内的内容列表 第二次对一次的列表取''"内的内容 ------ 或者你也可以把第二次正则改成 resultStrList += re.findall( r'''(?<=").+?\.jpg(?=")''' , sketchyStr ) 这样就会只取到jpg >>> ['http://gi1.mlist.alicdn.com/bao/uploaded/i1/T1sk3BFtRgXXXXXXXX_!!0-item_pic.jpg_b.jpg']
  • 打赏
  • 举报
回复

import re
sketchyStrList = re.findall( r'''(?<=<img).+?(?=/>)''' , urlStr )

resultStrList = []
for sketchyStr in sketchyStrList:
    
    resultStrList += re.findall( r'''(?<=").+?(?=")''' , sketchyStr )

print resultStrList
vensenter 2014-07-04
  • 打赏
  • 举报
回复
引用 2 楼 xmnathan 的回复:
不用正则还可以锻炼字符串处理算法

# -*- coding: cp936 -*-
urlStr = '''<img  data-ks-lazyload=  "http://gi1.mlist.alicdn.com/bao/uploaded/i1/T1sk3BFtRgXXXXXXXX_!!0-item_pic.jpg_b.jpg" /> <img  data-ks-lazyload=  "testtest123" />'''

resultStrList = []
resultStr = ""

isInItem = False
isInHttp = False

for i in xrange(len(urlStr)):
    
    if urlStr[i] == '<':
        isInItem = True
        continue
    if urlStr[i] == '>':
        isInItem = False
        continue
    if isInItem:
        if urlStr[i] == '"':
            if isInHttp:
                resultStrList.append(resultStr)
                resultStr = ""
            isInHttp = not isInHttp
            continue
        if isInHttp:
            resultStr+=urlStr[i]
            continue

print resultStrList

result:
>>> 
['http://gi1.mlist.alicdn.com/bao/uploaded/i1/T1sk3BFtRgXXXXXXXX_!!0-item_pic.jpg_b.jpg', 'testtest123']
>>> 

问题是我要爬一个网页的图片,其中有四百张图片我只想要60张商品的图片,就是要提取特定的url,所以用正则表达式比较好吧 我是新手菜b。。求解这是我写的 python3.3下 #catch pictures import urllib import urllib.request import re import os import math if(os.path.exists('beauty') == False): os.mkdir('beauty') def fix(): url="http://list.tmall.com/search_product.htm?spm=a221t.7047485.1996127753.34.aBdaVO&cat=50026259&sort=s&style=g&search_condition=23&from=sn_1_rightnav&active=1&industryCatId=50025174" req=urllib.request.Request(url) data= urllib.request.urlopen(req).read().decode('gbk', 'ignore') count=0 # pic=re.findall(r'"(http://.*?jpg)"',data)[count] while(count<60): imglist=re.findall(r'"(http://.*?jpg)"',data)[count] urllib.request.urlretrieve(imglist, 'beauty/' +str(count)+'.jpg' ) count=count+1 print(fix())
  • 打赏
  • 举报
回复
不用正则还可以锻炼字符串处理算法

# -*- coding: cp936 -*-
urlStr = '''<img  data-ks-lazyload=  "http://gi1.mlist.alicdn.com/bao/uploaded/i1/T1sk3BFtRgXXXXXXXX_!!0-item_pic.jpg_b.jpg" /> <img  data-ks-lazyload=  "testtest123" />'''

resultStrList = []
resultStr = ""

isInItem = False
isInHttp = False

for i in xrange(len(urlStr)):
    
    if urlStr[i] == '<':
        isInItem = True
        continue
    if urlStr[i] == '>':
        isInItem = False
        continue
    if isInItem:
        if urlStr[i] == '"':
            if isInHttp:
                resultStrList.append(resultStr)
                resultStr = ""
            isInHttp = not isInHttp
            continue
        if isInHttp:
            resultStr+=urlStr[i]
            continue

print resultStrList

result:
>>> 
['http://gi1.mlist.alicdn.com/bao/uploaded/i1/T1sk3BFtRgXXXXXXXX_!!0-item_pic.jpg_b.jpg', 'testtest123']
>>> 

The_Third_Wave 2014-07-04
  • 打赏
  • 举报
回复
正则都是一样的,建议楼主看看re库。

37,719

社区成员

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

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