2017-03-20 1 views
1

python3에서 chrome 및 xpath를 사용하여 "href"속성 값을 추출하려고합니다 on this web page. "HREF는"속성. 나는에 관심이 있어요 (프랑스어로 "아웃 사이더 - annonce") 영화의 트레일러에 대한 링크를 포함href 속성이 xpath (python3)를 사용하여 비어 있습니다.

Here is the html of the page, with the href I want in the <a> tag (highlighted in blue)

우선, XPath를 사용하여, ""태그가을 것 같습니다 "span"태그. 사실,이 코드를 사용하여 :

[<Element span at 0x111f70c08>] 

는 그래서 "DIV"태그 더 ""태그하지만, 단지 "범위"태그를 포함하지 :

response_main=urllib.request.urlopen("http://www.allocine.fr/film/fichefilm_gen_cfilm=231874.html") 
htmlparser = etree.HTMLParser() 
tree_main = etree.parse(response_main, htmlparser) 
tree_main.xpath('//*[@id=\"content-start\"]/article/section[3]/div[2]/div/div/div/div[1]/*') 

나는이 결과를 얻을. 나는 브라우저에서 html 시각화가 항상 서버에 의해 전송 된 "실제"html을 반영하지 않는다는 것을 읽었습니다. 따라서 나는 href를 추출하려면이 명령을 사용하려고 :

tree_main.xpath('//*[@id=\"content-start\"]/article/section[3]/div[2]/div/div/div/div[1]/span/@*') 

:

response_main=urllib.request.urlopen("http://www.allocine.fr/film/fichefilm_gen_cfilm=231874.html") 
htmlparser = etree.HTMLParser() 
tree_main = etree.parse(response_main, htmlparser) 
tree_main.xpath('//*[@id=\"content-start\"]/article/section[3]/div[2]/div/div/div/div[1]/span/@href') 

불행하게도,이 아무것도 반환하지 않습니다 ... 그리고이 나는이 명령으로 "범위"태그 내에 속성을 검사 할 때 나는 ... "HREF"에 대한은 "클래스"속성의 ​​값만을 가지고 :

['ACrL3ZACrpZGVvL3BsYXllcl9nZW5fY21lZGlhPTE5NTYwMDcyJmNmaWxtPTIzMTg3NC5odG1s meta-title-link'] 

내가 도움이 여기에 무슨 일이 일어나고 있는지 이해하고 싶습니다. "a"태그가 "span"태그 인 이유는 무엇입니까? 그리고 가장 중요한 질문은 "href"속성 값을 어떻게 추출 할 수 있습니까?

도움을 주셔서 감사합니다.

답변

2

동적으로 생성 된 필수 링크는 JavaScript입니다. urllib.request을 사용하면 HTML 페이지 소스 만 가져올 수 있으며 이 모두 필요합니다. JavaScript이 실행 된 후에는 페이지 소스를 얻을 수 있습니다.

당신은 selenium + chromedriver가 동적으로 생성 된 콘텐츠를 위해 사용할 수 있습니다 내가 python3에 코딩 아나콘다와 스파이더를 사용하고 @Andersson 팁에 대한

from selenium import webdriver as web 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.webdriver.support.ui import WebDriverWait as wait 

driver = web.Chrome("/path/to/chromedriver") 
driver.get("http://www.allocine.fr/film/fichefilm_gen_cfilm=231874.html") 
link = wait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@class='meta-title']/a[@class='xXx meta-title-link']"))) 
print(link.get_attribute('href')) 
+0

감사합니다. 그래서 셀레늄 3.3.1과 크롬 드라이버 2.24.1을 아나콘다에 추가했습니다. – user1671537

+0

당신을 위해 작동합니까 아니면 몇 가지 문제가 있습니까? – Andersson

+0

마지막 질문 하나! 이 명령을 사용할 때마다 : drive = web.chrome(), 크롬 브라우저가 열립니다. 당신은 href의 인쇄 후 그것을 닫을 수있는 방법을 알고 있습니까? (명령어 라인 사용) 이 명령어를 여러 번 사용하면 문제가 될 수 있습니다. :) – user1671537

관련 문제