2014-11-06 49 views
0

我使用beutifulsoup來提取文檔中圖像的地址。在文檔中的鏈接但需要清洗,(特別是大多數圖片像/image.jpg & randomtext鏈接,我想在形成https://www.webaddress.com/image.jpg&filetype=l「 爲了這個,我目前使用下面的代碼:如何根據兩個參數在美麗的湯中分割 - python

from bs4 import BeautifulSoup 

    c = ' <html> 
      <img src="/url/urls.do?filename=SWC.jpg&filetype=h" width="300" height="300" alt="imagesk"/> 
      <img src="/url/urls.do?filename=SWC.JPG&filetype=h" width="300" height="300" alt="imagesk"/> ' 

    soup = BeautifulSoup(c) 
    link = [x['src'] for x in soup.findAll('img')]         
    link = [link_temp.split('.jpg')[0] for link_temp in link]      
    full_images_links = ["https://www.webaddress.com" + linktemp + ".jpg&filetype=l" for linktemp in link] 

這主要搜索所有以.jpg結尾的鏈接圖片,刪除它之後的內容(大量隨機代碼),然後通過格式獲得圖片。

當圖片獲得擴展名「.jpg 「,但不是當它有擴展名時」.JPG「

對於上面的例子,對於第一圖像文件所需的輸出正常工作,並給出:

https://www.webaddress.com/url/urls.do?filename=SWC.jpg&filetype=l 

然而第二個,因爲它並基於分割的代碼出來作爲

https://www.webaddress.com/url/urls.do?filename=SWC.JPG&filetype=h.jpg&filetype=l 

大寫「.JPG」

我想找一些可以擴展到不同格式的工作(例如可能遇到.JPEG,.jpeg等)

+0

你能詳細說明一個很好的可重現的例子,包括一個例子輸入和所需的輸出?謝謝。 – alecxe 2014-11-06 23:16:38

+0

我已經添加了一個示例輸入。第一個圖像文件所需的輸出工作正常(即https://www.webaddress.com/url/urls.do?filename=SWC.jpg&filetype=l)第二個,但代碼出現爲「https:/ /www.webaddress.com/url/urls.do?filename=SWC.JPG&filetype=h.jpg&filetype=l」 – kyrenia 2014-11-06 23:31:33

回答

1

或者,您可以使用urlparse模塊URL中提取的文件名:

base_url = "https://www.webaddress.com/url/urls.do?filename={filename}&filetype=l" 
soup = BeautifulSoup(c) 

print [base_url.format(filename=urlparse.parse_qs(urlparse.urlparse(img['src']).query)['filename'][0]) 
     for img in soup.find_all('img')] 

打印:

[ 
    'https://www.webaddress.com/url/urls.do?filename=swc.jpg&filetype=l', 
    'https://www.webaddress.com/url/urls.do?filename=SWC.JPG&filetype=l' 
] 

請注意,這將對於任何圖像文件的擴展工作。我們只是提取文件名並使用format()將它們粘貼到新URL中的佔位符中。

0

您可以使用正則表達式來拆分每個鏈接。允許您忽略該案例並輕鬆解決不同的jpg/jpeg替代方案。

設置:

from bs4 import BeautifulSoup 

c = """ 
<html> 
     <img src="/url/urls.do?filename=SWC.jpg&&filetype=h" width="300" height="300" alt="imagesk"/> 
     <img src="/url/urls.do?filename=SWC.JPG&&filetype=h" width="300" height="300" alt="imagesk"/> 
""" 

soup = BeautifulSoup(c) 
link = [x['src'] for x in soup.findAll('img')] 

使用正則表達式:

import re 

extracted_links = [re.split(r'\.jpg|\.jpeg', item, flags=re.IGNORECASE)[0] 
        for item in link] 
extracted_links 
Out[11]: ['/url/urls.do?filename=SWC', '/url/urls.do?filename=SWC'] 

正則表達式可以像官樣文章,如果你不熟悉它,但是這一次的 很簡單:a|b意味着「A或B 「,然後.在正則表達式 中有特殊含義,所以你需要用反斜槓來轉義它。