2017-03-20 6 views
1

python3でchromeとxpathを使用して、 "href"属性の値を抽出しようとしましたon this web page。 「HREF」は属性。私が興味を持っています(フランス語で「BANDE-annonce」)の映画の予告編へのリンクが含まれていxref(python3)を使用してhref属性を空にしました

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を抽出するために、このコマンドを使用しようとしました:私は、このコマンドで「スパン」タグ内の属性をチェックするとき

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') 

残念ながら、これは何も返しません...そして:

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

私はここで何が起こっているか理解するためのいくつかの助けが欲しい

['ACrL3ZACrpZGVvL3BsYXllcl9nZW5fY21lZGlhPTE5NTYwMDcyJmNmaWxtPTIzMTg3NC5odG1s meta-title-link'] 

:私は「class」属性の値を得たが、「HREF」について何も...。なぜ "a"タグが "span"タグなのですか?そして私にとって最も重要な質問は、 "href"属性の値をどのように抽出できますか?

おかげであなたの助けのためにたくさん!

答えて

2

動的に生成される必要なリンクは、JavaScriptです。 urllib.requestでは、JavaScriptが実行された後にHTMLが必要な間に、最初のHTMLページソースしか取得できません。

あなたは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

最後に1つの質問!このコマンドを使用するたびに、drive = web.chrome()、クロムブラウザが開きます。あなたはhrefの印刷後にそれを閉じる方法を知っていますか? (コマンドラインで) このコマンドを何度も使用すると問題になることがあります。 – user1671537

関連する問題