2017-12-02 28 views
0

프로그래밍에 익숙하지 않아 웹 사이트에서 이미지 및 PDF를 다운로드하려고합니다. 소스 코드에서 필요한 항목은 부분 URL이있는 옵션 태그에 있습니다. 사이트는 드롭 다운 메뉴에 이러한 항목을 나열하고 iframe에 표시하지만 전체 URL을 사용하여 각 항목을 자체 페이지에서 열 수 있습니다.스크랩 한 URL 수정 및 확장명 변경

지금까지 내 코드는 옵션을 찾아 페이지의 기본 주소에 부분 URL을 추가하여 각 옵션에 대한 전체 URL을 만들고 .tif 및 .TIF URL에서 최종 "/"를 제거하고 " .pdf ".

그러나 .tif 및 .TIF URL의 경우 새 페이지에서 열려면 '변환'을 'pdf'로 변경해야합니다. .tif.pdf 및 .TIF.pdf URL 만 변경하고 나머지는 변경하지 않는 방법이 있습니까?

from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 
import os 

my_url = 'http://example.com' 
uClient = uReq(my_url) 
page_html = uClient.read() 
uClient.close() 

page_soup = soup(page_html, "html.parser") 

options = page_soup.findAll("select",{"id":"images"})[0].findAll("option") 
values = [o.get("value") for o in options] 

split_values = [i.split("|", 1)[0] for i in values] 
# The option value is split to separate the url from its label 
# <option value="/convert/ASRIMG/new/hop.TIF/|New Form"></option> 

new_val = [] 
for val in split_values: 
    ext = os.path.splitext(val.rstrip('/'))[-1] 
    new_ext = ext 
    if ext.lower() == '.tif': 
     new_ext += '.pdf' 
    new_val.append(val.rstrip('/').replace(ext, new_ext)) 

for i in range (len(new_val)): 
    image_urls = ('http://example.com' + new_val[i]) 

나의 현재 결과 :

print (new_val) 

/ASRIMG/good.jpg 
/ASRIMG/foo/bar1.jpg 
/ASRIMG/foo/bar2.jpg 
/ASRIMG/foo/bar3.jpg 
/convert/ASRIMG/new/hop.TIF.pdf 
/convert/REG/green1.tif.pdf 
/convert/REG//green2.tif.pdf 
/convert/SHIP/green3.tif.pdf 
/convert/SHIP/green4.tif.pdf 
/convert/SHIP/green5.tif.pdf 
/SKETCHIMG/001.png 
/SKETCH/002.JPG 


print (image_urls) 

http://example.com/ASRIMG/good.jpg 
http://example.com/ASRIMG/foo/bar1.jpg 
http://example.com/ASRIMG/foo/bar2.jpg 
http://example.com/ASRIMG/foo/bar3.jpg 
http://example.com/convert/ASRIMG/new/hop.TIF.pdf 
http://example.com/convert/REG/green1.tif.pdf 
http://example.com/convert/REG//green2.tif.pdf 
http://example.com/convert/SHIP/green3.tif.pdf 
http://example.com/convert/SHIP/green4.tif.pdf 
http://example.com/convert/SHIP/green5.tif.pdf 
http://example.com/SKETCHIMG/001.png 
http://example.com/SKETCH/002.JPG 

내가 필요한 것 :

http://example.com/ASRIMG/good.jpg 
http://example.com/ASRIMG/foo/bar1.jpg 
http://example.com/ASRIMG/foo/bar2.jpg 
http://example.com/ASRIMG/foo/bar3.jpg 
http://example.com/pdf/ASRIMG/new/hop.TIF.pdf 
http://example.com/pdf/REG/green1.tif.pdf 
http://example.com/pdf/REG//green2.tif.pdf 
http://example.com/pdf/SHIP/green3.tif.pdf 
http://example.com/pdf/SHIP/green4.tif.pdf 
http://example.com/pdf/SHIP/green5.tif.pdf 
http://example.com/SKETCHIMG/001.png 
http://example.com/SKETCH/002.JPG 

답변

0

이 단계 후에 :

split_values = [i.split("|", 1)[0] for i in values] 

이 코드는 상부 및 하부 tif 여야 모두 처리합니다

In [48]: import os 

In [49]: split_values = ['/ASRIMG/good.jpg', '/convert/ASRIMG/new/hop.TIF/', 'SK 
    ...: ETCHIMG/001.png'] 

In [50]: new_val = [] 

In [51]: for val in split_values: 
    ...:  ext = os.path.splitext(val.rstrip('/'))[-1] 
    ...:  new_ext = ext 
    ...:  if ext.lower() == '.tif': 
    ...:   new_ext += '.pdf' 
    ...:  new_val.append(val.rstrip('/').replace(ext, new_ext)) 
    ...: 
    ...: 

이 오른쪽 측면에서 split_values ​​목록에서 각 값에서 .tif/ 스트립 다음

+0

귀하의 빠른 회신에 감사드립니다 결국 .tif.pdf을 추가합니다. 이 코드를 시도했지만 모든 URL에 .tif.pdf를 추가했습니다. '.tif.pdf' (좋은 것) 외에도'.jpg.tif.pdf','.TIF.tif.pdf','png.tif.pdf'가 있습니다.). – shybr

+0

'.TIF /'를 수정하는 코드를 수정했습니다. '.jpg.tif'와'.png.tif'에 예상되는 결과는 무엇입니까? –

+0

'.jpg','.JPG' 및'.png'는 변경되어서는 안됩니다. '.TIF /'와'.tif /'만이'.TIF.pdf'와'.tif.pdf'로 바뀝니다 – shybr