2014-09-21 3 views
1

CSV 파일에서 여러 URL을 반복합니다. URL이 다음 구조를 가지고 : 등파이썬에서 URL에서 조각 추출하기

http://www.parool.nl/parool/nl/4024/AMSTERDAM-CENTRUM/article/detail/3751723/2014/09/21 
http://www.parool.nl/parool/nl/5/POLITIEK/article/detail/3751624/2014/09/20/VVD-wil- boete-van-250-euro-voor-het-naroepen-van-vrouwen.dhtml 

,

내가 (이 경우, 4 슬래시, "암스테르담-Centrum에서"와 "POLITIEK"후) 문서의 범주를 얻을 필요가, 그리고 그들을 목록에 추가하십시오.

나는 urllib2가 함께 일하고 있어요 :

reader=CsvUnicodeReader(open("my.csv","r")) 
for row in reader: 
    url = row[0] 
    req=urllib2.Request(url) 

URL을 구문 분석하는 방법이 있나요?

+0

를 사용할 수있다 ['urlparse'] (https://docs.python.org/2/library/urlparse.html) 모듈 (파이썬 3.x 용'urllib.parse'). 그러나 경로의 특정 부분에 관심이있는 것처럼 보이므로 정규 표현식을 사용해야 할 수도 있습니다. –

답변

0

여기 정규 표현식이 정말로 필요하지 않습니다.

>>> a=[] 
>>> with open('in','r') as f: 
...  r=csv.reader(f,delimiter='/') 
...  for row in r: 
...    a.append(row[6]) 
... 
>>> a 
['AMSTERDAM-CENTRUM', 'POLITIEK'] 



>>> a=[] 
>>> with open('in','r') as f: 
...  r=csv.reader(f) 
...  for row in r: 
...    a.append(row[0].split('/')[6]) 
... 
>>> a 
['AMSTERDAM-CENTRUM', 'POLITIEK'] 
2

당신은 당신이 관심있는 경로의 카테고리 부분을 추출합니다 regular expression를 사용하여 다음 구성 요소로 URL을 분할하고 안정적으로 경로 구성 요소를 추출하고 urlparse.urlparse를 사용할 수 있습니다

from urlparse import urlparse 
import re 


URLS = ["http://www.parool.nl/parool/nl/4024/AMSTERDAM-CENTRUM/article/detail/3751723/2014/09/21", 
     "http://www.parool.nl/parool/nl/5/POLITIEK/article/detail/3751624/2014/09/20/VVD-wil-boete-van-250-euro-voor-het-naroepen-van-vrouwen.dhtml"] 

pattern = re.compile("/parool/nl/\d*/(.*?)/article/detail/.*$") 


for url in URLS: 
    parsed = urlparse(url) 
    match = pattern.match(parsed.path) 
    if match: 
     category = match.group(1) 
     print category 

출력 : 일반 expressio에

AMSTERDAM-CENTRUM 
POLITIEK 

노트 N :

  • \d*는 자리
  • /(.*?)/ 일치하는 문자를 여러 번 제로 둘 사이 슬래시 비 탐욕 여러 번 (0-9)는 0과 일치하고, 사선의 부분의 그룹을 작성
0

색인과 우리가 함께 경로를 splite '\'및 액세스 5 필드를 urlparse 모듈을 파악하고 split('/') 기능을 다음의 path 방법으로 문서의 범주를 얻을 수있다 [4].

데모 : 모든 URL과 유사한 구조를 가지고있는 경우

>>> from urlparse import urlparse 
>>> your_url=['http://www.parool.nl/parool/nl/4024/AMSTERDAM-CENTRUM/article/detail/3751723/2014/09/21','http://www.parool.nl/parool/nl/5/POLITIEK/article/detail/3751624/2014/09/20/VVD-wil- boete-van-250-euro-voor-het-naroepen-van-vrouwen.dhtml'] 
>>> [urlparse(ul).path.split('/')[4] for ul in your_url] 
['AMSTERDAM-CENTRUM', 'POLITIEK'] 
1

은 단순히 (등등 프로토콜, 호스트, 포트, 경로) 그것의 세그먼트에 URL을 분할하는

url.rsplit('/')[6] 
관련 문제