在python中从URL提取片段

2024-04-27 03:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个csv文件中迭代多个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

等等

我需要获取文章类别(在第四个斜杠后面,这里是“AMSTERDAM-CENTRUM”和“POLITIEK”),并将它们附加到一个列表中。你知道吗

我正在使用urllib2:

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

有没有办法解析这个网址?你知道吗


Tags: csvhttpurlwwwnlarticleurllib2van
3条回答

您可以使用^{}将URL拆分为其组件并可靠地提取路径组件,然后使用regular expression提取您感兴趣的路径的类别部分:

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

输出:

AMSTERDAM-CENTRUM
POLITIEK

正则表达式注释:

  • \d*匹配任何数字(0-9)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']

如果所有的URL都有相似的结构,那么您可以简单地使用

url.rsplit('/')[6]

相关问题 更多 >