2016-04-18 4 views
2

特定のURLから一部の情報を削り取ろうとしています。 www.foo.bar/bazBeautifulSoup:同じURLで「同意する」をクリックした後にのみHTMLをスクラップする

ウェブブラウザでそのURLにアクセスすると、通常の「私は18歳以上です」ボタンが表示されます。 URLは変更されず、実際のコンテンツは手動でそのボタンをクリックするとロードされます。

私は実際に掻きたい情報にアクセスできるように、「私は18歳以上です」ボタンをクリックして「シミュレート」したいと思います。

これをクリックする必要があり、ボタンのHTMLコードです:私は任意のヒントをいただければ幸いです

<script type="text/javascript"><!-- 
function showContent() { 
    document.getElementById('all-content').style.display = ''; 
    document.getElementById('adultmessage').style.display = 'none'; 
    document.cookie = 'adult=yes; path=/'; 
} 
function hideAdultContent(){ 
    document.getElementById('all-content').style.display = 'none'; 
} 
// --></script> 

<div align=center> 
    <a href="javascript:showContent()"><span>ENTRAR</span></a> 
</div> 

そして、これはhref属性によって呼び出されるJavaScript関数ですこれを行うために何を研究するか。

+1

リンクを共有できますか? Padraicのように@ Xarの –

+1

が言った。セレンはあなたの最善の策です。 [slack](https://github.com/Wykleph/Slack)フレームワークをチェックしてください。物事を整理するのに役立つかもしれません。 – DuckPuncher

+0

@PadraicCunninghamのURLはhttp://www.pasion.com/amistad/です。実際のコンテンツにアクセスするには、「Entrar」をクリックしてください。 – Xar

答えて

3

あなたは、ヘッドレスブラウジングPhantomJSでそれを使用して要素をクリックして、セレンを使用することができ、JavascriptがBeautifulsoupを使用して対話することはできません。これを与える必要があり、その後、我々はクリックをシミュレートするXPathは要素を見つけます

from selenium import webdriver 

dr = webdriver.PhantomJS() 

dr.get("www.foo.bar/baz") 

dr.find_element_by_xpath("//a[@href='javascript:showContent()']").click() 

何が必要なのかHREFが実際javascript:muestradulto()あるので

私は推測サイトはスペイン語である:

dr.find_element_by_xpath("//a[@href='javascript:muestradulto()']").click() 

リンクをクリックすると、あなたprint(dr.page_source)されたら、あなたはトップに近いEL BUSCANUNCIOSを持って、次のページを取得表示されます。

In [1]: url = "http://www.pasion.com/amistad/" 

In [2]: from selenium import webdriver 

In [3]: dr = webdriver.PhantomJS() 

In [4]: dr.get(url) 

In [5]: dr.find_element_by_xpath("//a[@href='javascript:muestradulto()']").click() 

In [6]: print("EL BUSCANUNCIOS" in dr.page_source) 
True 

あなたはBS4を使用することを好む場合は、BeautifulSoupにソースを渡して、その上で離れて動作しますが、セレンは、あなたは、XPath、あなたがより便利かもしれないCSSセレクタのはるかに大きな範囲を使用することができますすることができます。

は、あなただけの要求を使用して、ページに戻りますが、あなたが実際にソースコードを入手するものを見て実際にあれば、リンクは唯一のWebページ上でクリックする必要があります

In [14]: from requests import get 

In [14]: from bs4 import BeautifulSoup 

In [15]: soup = BeautifulSoup(get(url).content) 

In [16]: print(soup.select("#cuerpo div[class^=x]")[:2]) 
[<div class="x1"><div class="x2">\n<div class="x3"></div>\n<div class="x4">Amistad en Barcelona i rodalies (BARCELONA)</div>\n<div class="x5">r508491244 </div>\n<div class="x6" style="font-size:8px"><a href="/creditos/auto-renueva.php" style="color:#ee0000">AUTO\xb7RENUEVA</a></div>\n</div>\n<div class="x9"><a class="cti" href="para-mujer-busque-amistad-508491244.htm" target="_blank">PARA MUJER BUSQUE AMISTAD</a><br/><div class="tx"> Deseo coincidir con una mujer que busque una relaci\xf3n de amistad continuada con un hombre maduro, tranquilo, educado, cari\xf1oso y de trato f\xe1cil. No tengo pareja y ahora no la busco. Busco una amiga para pasear, hablar, echar unas risas, caf\xe9s, cines, conciertos, etc. No me importa para nada la talla de suje ni de pantal\xf3n que usas, ni tu edad, ni tampoco si tienes eso que ahora se llaman cargas. Soy un tipo normal y busco lo mismo. Si necesitas algo m\xe1s, tambi\xe9n lo podemos hablar. Con afecto. Dani. Edad 54 a\xf1os</div><br/> <div class="x11">\n</div>\n</div>\n<div class="x10" id="ph508491244" style="width: auto">\n</div></div>, <div class="x2">\n<div class="x3"></div>\n<div class="x4">Amistad en Barcelona i rodalies (BARCELONA)</div>\n<div class="x5">r508491244 </div>\n<div class="x6" style="font-size:8px"><a href="/creditos/auto-renueva.php" style="color:#ee0000">AUTO\xb7RENUEVA</a></div>\n</div>] 

だから、実際にする必要はありません何かをクリックすることを心配する。

+0

パドレイクありがとう!素晴らしい説明!もう少し小さな質問です:どこから 'get'メソッドを取得しますか?何をインポートする必要がありますか?あなたの15行目で 'NameError:name 'get' not not defined'というエラーメッセージが出ます。 – Xar

+1

申し訳ありませんが、 'from requests import get'があったはずのコピーをコピーすることを意味します –

+0

もう一度ありがとうございます! – Xar

関連する問題