鍍金池/ 問答/Java  HTML/ 正則表達式提取網(wǎng)頁源碼的url鏈接

正則表達式提取網(wǎng)頁源碼的url鏈接

網(wǎng)頁源碼單行:
</title><link rel="shortcut icon" href="/_layouts/15/Canway.Portal.External.Web/images/favicon.png" type="image/vnd.microsoft.icon" id="favicon"><link rel="stylesheet" type="text/css" href="/_layouts/15/2052/styles/Themable/corev15.css?rev=OjbVZfNOSp9SHxHy9FUrXw%3D%3D"><link rel="shortcut icon" href="/gday!!!!!!!!!!!!!!!!!!!!!!/_layouts/15/Canway.Portal.External.Web/images/.png" type="image/vnd.microsoft.icon" id="favicon">

現(xiàn)在要實現(xiàn)正則表達式提取其中的三個鏈接
1:/_layouts/15/Canway.Portal.External.Web/images/favicon.png
2:/_layouts/15/2052/styles/Themable/corev15.css?rev=OjbVZfNOSp9SHxHy9FUrXw%3D%3D
3:/gday!!!!!!!!!!!!!!!!!!!!!!/_layouts/15/Canway.Portal.External.Web/images/.png

用python的re模塊不能返回所有的結(jié)果,只會返回匹配到的最后一個,請問一下用什么方式可以?

回答
編輯回答
影魅

clipboard.png

2017年9月28日 09:10
編輯回答
司令

哈哈最近剛了解了正則,拿來試了試。
javasCript代碼如下:

var raw = '</title><link rel="shortcut icon" href="/_layouts/15/Canway.Portal.External.Web/images/favicon.png" type="image/vnd.microsoft.icon" id="favicon"><link rel="stylesheet" type="text/css" href="/_layouts/15/2052/styles/Themable/corev15.css?rev=OjbVZfNOSp9SHxHy9FUrXw%3D%3D"><link rel="shortcut icon" href="/gday!!!!!!!!!!!!!!!!!!!!!!/_layouts/15/Canway.Portal.External.Web/images/.png" type="image/vnd.microsoft.icon" id="favicon">';
var linkReg = /href="[^"]*"/g;

function findMatch(reg, raw) {
  var data = {}
  var arr = []
  while(true) {
    data = reg.exec(raw);
    if (data!= null) {
      let pos1 = data[0].indexOf('"');
      let pos2 = data[0].lastIndexOf('"');
      let item = data[0].slice(pos1 + 1, pos2)
      arr.push(item);
      console.log(item);
    } else {
      break;
    }
  }
  return arr;
}

findMatch(linkReg, raw);
2017年5月27日 11:01
編輯回答
過客

您好,方法有很多,re模塊和xpath等等一大把。當(dāng)然您說re模塊不行,我就用re模塊舉個栗子:
先定義您的網(wǎng)頁源碼:

a='您的網(wǎng)頁源碼'

接下來是定義re模塊的抓取規(guī)則,這里可以用到compile貪婪匹配:

pattern = re.compile('</title><link rel="shortcut icon" href=(.*?)type.*?href=(.*?)><link rel=.*? href=(.*?) type=.*?'',re.I)

注意最后加上re.I,用于忽略大小寫(當(dāng)然這里不加也可以),接下來是讀取抓取的數(shù)據(jù):
定義一個空list:

items = re.findall(pattern,a)
pageStories = []

然后通過for遍歷讀出來:

for item in items:
    pageStories.append([item[0].strip(),item[1].strip(),item[2].strip()])
print  pageStories

最后上圖,證明我說的是真的:
圖片描述

2017年11月19日 14:45
編輯回答
祉小皓

正則一般就是找共性,你這就是需要href引號里面的內(nèi)容,所以就
/href="S+"/g
出來后,還需要刪去href與引號
不過我感覺另一個答案更適合你

2017年3月23日 19:35