python
2016-09-12 7 views 0 likes 
0

次のコード行は、特定のプレイリストへのソースコードを提供し、すべてのURLを変数 "newlink"に格納します。私は、このURLの文字列を通り、 '/ watch?v ='という文字列をPythonの配列に格納して、配列[0]が私に最初のリンクarray [1]を与えるループを書いてみたい2番目のように。これを行う最善の方法は何でしょうか?ループを使用する(効率的ループ技法):Pythonで特定のURLを抽出するには

import re 
from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 
from bs4 import BeautifulSoup 
import requests 


#Asks which playlist you want downloaded 
print ('Which playlist do you want to download?') 
playlist = input() 

#Access my youtube playlists page 
driver = webdriver.Chrome(executable_path='E:\chromedriver\chromedriver.exe') 
driver.get("https://www.youtube.com/user/randomuser/playlists?sort=dd&view=1&shelf_id=0") 

#Access the 'classic' playlist 
if playlist == 'classic': 
    driver.find_element_by_xpath('//a[contains(text(), "classic")]').click() 
    newurl = driver.current_url 

    requrl = requests.get(newurl) 
    requrlcont = requrl.content 

    soup = BeautifulSoup(requrlcont, "html.parser") 
    for link in soup.find_all('a'): 
     newlink = link.get('href')) 
+0

/観る」場合は、soup.find_all内のリンクのリンク= [リンク[ 'のhref']( 'A') 'と最後の2行を置き換えることができます?V = 'in link.get(' href '、' ')] '。あるいは、ループ内に 'if'文を置くだけです。 – Evert

+0

現在のコードは毎回 'newlink'を上書きします:最後のURLだけが' newlink'に格納されることに注意してください。 – Evert

答えて

0

このコードは、実際にアレイを作成したプレイリストでテストされています。

import re 
from selenium import webdriver 
from bs4 import BeautifulSoup 
import requests 

#Asks which playlist you want downloaded 
print ('Which playlist do you want to download?') 
playlist = raw_input() 

#Access my youtube playlists page 
driver = webdriver.Chrome(executable_path='/usr/lib/chromium-browser/chromedriver') 
driver.get("https://www.youtube.com/user/randomuser/playlists?sort=dd&view=1&shelf_id=0") 

#Access the 'Favorites' playlist 
if playlist == 'Favorites': 
    driver.find_element_by_xpath('//a[contains(text(), "Favorites")]').click() 
    newurl = driver.current_url 

    requrl = requests.get(newurl) 
    requrlcont = requrl.content 
    links = [] 
    soup = BeautifulSoup(requrlcont, "html.parser") 
    for link in soup.find_all('a'): 
     #print("link " + str(link)) 
     if re.match("/watch\?v=", link.get('href')): 
      links.append(link.get('href')) 

    print links 

出力

python pyprog.py 
Which playlist do you want to download? 
Favorites 
[u'/watch?v=fG9_AYzehJw&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=fG9_AYzehJw&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=fG9_AYzehJw&index=1&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=fG9_AYzehJw&index=1&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=MKfDwChOoHI&index=2&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=MKfDwChOoHI&index=2&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=JQTXawaAKNA&index=3&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=JQTXawaAKNA&index=3&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=dG8wsae-6tU&index=4&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=dG8wsae-6tU&index=4&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=9mcZdDCOeuE&index=5&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=9mcZdDCOeuE&index=5&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=lh0ZB9OD_fg&index=6&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=lh0ZB9OD_fg&index=6&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=NfLmCPfx_gY&index=7&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=NfLmCPfx_gY&index=7&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=FoQzWb_f1oA&index=8&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=FoQzWb_f1oA&index=8&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=l8rJ1WML60Y&index=9&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=l8rJ1WML60Y&index=9&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=9rCug1ANQdE&index=10&list=FLRMDL-xDn7xqDznwaQbUH6g', u'/watch?v=9rCug1ANQdE&index=10&list=FLRMDL-xDn7xqDznwaQbUH6g'] 
関連する問題