2017-04-08 9 views
2

私が何か間違っていると説明した場合、これが私を許してください。特定のURLからのリンクを掻き立てる

私は、特定のWebサイトからpythonでスクレイプURLを取得しようとしており、csvへのリンクを解析しています。問題は、BeautifulSoupのWebサイトを解析するときです。私はURLを抽出できません。なぜなら、Pythonで解析すると、そのブランチの下にある<div id="dvScores" style="min-height: 400px;">\n</div>,しか取得できないからです。しかし、コンソールを開いてリンクがあるテーブルをコピーしてテキストエディタに貼り付けると、600ページのhtmlが貼り付けられます。私がしたいのは、リンクを表示するforループを書くことです。 htmlの構造は次のとおりです。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
#shadow-root (open) 
<head>...</head> 
<body> 
    <div id="body"> 
    <div id="wrapper"> 
     #multiple divs but i don't need them 
     <div id="live-master"> #what I need is under this div 
     <span id="contextual"> 
      #multiple divs but i don't need them 
      <div id="live-score-master"> #what I need is under this div 
      <div ng-app="live-menu" id="live-score-rightcoll"> 
       #multiple divs but i don't need them 
       <div id="left-score-lefttemp" style="padding-top: 35px;"> 
       <div id="dvScores"> 
        <table cellspacing=0 ...> 
        <colgroup>...</colgroup> 
        <tbody> 
         <tr class="row line-bg1"> #this changes to bg2 or bg3 
         <td class="row"> 
          <span class="row"> 
          <a href="www.example.com" target="_blank" class="td_row"> 
            #I need to extract this link 
          </span> 
         </td> 
         #Multiple td's 
         </tr> 
         #multiple tr class="row line-bg1" or "row line-bg2" 
         . 
         . 
         . 
        </tbody> 
        </table> 
        </div> 
       </div> 
       </div> 
      </div> 
     </span> 
    </div> 
    </div> 
</body> 
</html> 

私は間違っていますか?私はPythonのために、HTMLをテキストに貼り付けたり、正規表現でリンクを抽出するのではなく、システムを自動化する必要があります。 私のPythonコードは、以下である:

import requests 
from bs4 import BeautifulSoup 
r=requests.get("http://example.com/example") 
c=r.content 
soup=BeautifulSoup(c,"html.parser") 
all=soup.find_all("span",id="contextual") 
span=all[0].find_all("tbody") 
+0

希望の出力を指定できますか?それはURLのようです: 'http:// www.mackolik.com/Mac/2581146/Kayserispor-Osmanlıspor-FK'? – vold

+0

@voldはい正しい。すべての試合にはチームの名前の間にリンクがあります。それが私が抽出したいリンクです。 – Gorkem

答えて

0

このサイトはその内容を移入するためのJavaScriptを使用して操作を行うことができ、そのため、あなたはbeautifulsoup経由でURLを取得することはできません。あなたのブラウザのネットワークタブを調べるなら、this linkを見つけることができます。それはあなたが必要とするすべてのデータを含んでいます。あなたはそれを解析し、すべての望ましい値を抽出することができます。

import requests 

req = requests.get('http://goapi.mackolik.com/livedata?group=0').json() 
for el in req['m'][4:100]: 
    index = el[0] 
    team_1 = el[2].replace(' ', '-') 
    team_2 = el[4].replace(' ', '-') 
    print('http://www.mackolik.com/Mac/{}/{}-{}'.format(index, team_1, team_2)) 
+0

soooたくさんありがとう。私は最後のことを聞きたい、いくつかのリンクは 'http://www.mackolik.com/Mac/... 'を含み、いくつかのリンクは' http://www.mackolik.com/Basket-Mac/ ..どのように私はこれら2つを区別する何かを書くことができますか? – Gorkem

+0

申し訳ありませんが、私はあなたにそれを残す必要があります。私は、これらのURLがサッカーとバスケットボールのチームでは異なることを知ることができます。あなたはjsonデータの中でそれらの違い(おそらく彼らのリーグの名前?)を見つけ、その違いをチェックして正しいURLを返すスクリプトに条件文を追加する必要があります。または単にあなたの現在の位置に基づいてURLを変更することができます:最初に、フットボールのURLを返すと 'バスケット 'を追加して残りのバスケットボールのURLを返します。 – vold

+0

あなたが示唆したように、これらのタイプの識別子を発見しました。もう一度ありがとう:) – Gorkem

1

あなたがこすりURLをしようとしているならば、あなたはのhrefを取得する必要があります:

urls = soup.find_all('a', href=True) 
+0

私はそれを試みましたが、うまくいきません、私は理由はわかりませんが、それは ' – Gorkem

+1

の中のリンクを渡して本当ですか?あなたが投稿したサンプルから「www.example.com」を抽出することができました。実際のページを私に見せてもらえますか? –

+0

"www.mackolik.com/Canli-Sonuclar"私が必要とするリンクは、あなたがスコアをクリックするものです。 – Gorkem

0

HTMLを動的にJSによって生成されているように思え。ブラウザを模倣するには、クローラでクロールする必要があります。 requestsを使用しているため、既にクローラsessionがあります。

session = requests.session() 
data = session.get ("http://website.com").content #usage xample 

この後、あなたがパース、追加のスクレイピングなど

+0

私はそれを試してみましたが、うまくいきませんでした。 – Gorkem

+0

ウェブサイトがユーザエージェントをチェックしている可能性があります。ユーザーエージェントをChromeのように変更しようとしましたか? – Dashadower

関連する問題