2016-11-20 1 views
2

私は、Python 3.5とその機能の1つがYouTubeチャンネルのURLを取得する必要があるreモジュールを使用してスクレーパー/ Webクローラーを開発しています。私はこれを達成するために、正規表現のマッチングを含むコードの以下の部分を使用しています:正規表現を使用して特定の情報を含まないURLを見つけよう

href = re.compile("(/user/|/channel/)(.+)") 

何それは返すべきであることは/user/usernameまたは/channel/channelnameのようなものです。これは大部分が成功していますが、今度は/user/username/videos?view=60などの詳細情報や、username/部分の後に続く何かの情報を含むURLの種類を取得します。

この問題をアドレスする試みにおいて、ノー成功と他のバリエーションと一緒として

href = re.compile("(/user/|/channel/)(?!(videos?view=60)(.+)") 

上記のコードのビットを書き直し。 URLにvideos?view=60が含まれていないURLをフェッチするようにコードを書き直すにはどうすればよいですか?

答えて

1

特定の正規表現パターンで、次のアプローチを使用します。

user_url = '/user/username/videos?view=60' 
channel_url = '/channel/channelname/videos?view=60' 

pattern = re.compile(r'(/user/|/channel/)([^/]+)') 

m = re.match(pattern, user_url) 
print(m.group()) # /user/username 

m = re.match(pattern, channel_url) 
print(m.group()) # /channel/channelname 
+0

... '(?=/| $)'ここで役に立たないようです... –

+1

@ l'L l、同意し、取り除いた – RomanPerekhrest

+0

@RomanPerekhrestありがとう!これはうまくいった。 – erik7970

0

私はこのアプローチを使用し、何をしたいんようです。

import re 

user = '/user/username/videos?view=60' 
channel = '/channel/channelname/videos?view=60' 

pattern = re.compile(r"(/user/|/channel/)[\w]+/") 

user_match = re.search(pattern, user) 

if user_match: 
    print user_match.group() 
else: 
    print "Invalid Pattern" 

pattern_match = re.search(pattern,channel) 

if pattern_match: 
    print pattern_match.group() 
else: 
    print "Invalid pattern" 

これが役に立ちます。

関連する問題