2017-04-02 19 views
0

私のWebスクレーパー検索では、さまざまな数のタブラウンドが返されます。テーブルを扱うのに慣れていません。これらの表はそれぞれ3列です。最初の列の通り番号が正しいかどうかチェックします。そうであれば、その行の3番目の列からリンクを取得する必要があります。それに関するどんな考え?私のコードは明らかに機能しませんが、私がしようとしていることのアイデアを与えるべきです。私のコードは現在行ごとにデータを扱っていませんが、tdだけはtdだけです。HTMLテーブルからhrefリンクを取得するための戦略

私の理想的なコードがどのように見えるか:#マッチは、内のリンクをつかむ場合は、最初の列のストリート#は

  • と一致した場合に

    1. は、最初のテーブルの行に

    2. のチェックをグラブ3列目

    3. #が一致しない場合は、次の表の行を確認するために移動してください

    私はまだ非常にプログラミングの面白いので、私のコードは単純ではありませんが(しかし、書面が不十分ですが)面倒です。

    質問

    <tr> 
        <td class="transactionTableBodyText">5250 S RAINBOW BLVD 1001 </td> 
        <td class="transactionTableBodyText" align="center">SPRING VALLEY</td> 
        <td class="transactionTableBodyText" align="center"> 
        <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a> 
        </td> 
    </tr> 
    

    私のPython的セレンコードでHTML。

    td = driver.find_elements_by_css_selector("td.transactionTableBodyText") 
        i = 0 
        while i <= len(td): 
         try: 
          if StrtNum in td[i].text: 
           print("We matched %s!" % (StrtNum)) 
    
           #This is the incorrect part where I try to get to the 'a' selector in the 3rd column from the correctly identified 1st column. 
           ParcelLink = td[i+2].driver.find_elements_by_css_selector('a').get_attribute('href') 
           print(ParcelLink) 
          else: 
           return 
         except: 
          break 
         i+=1 
    
  • +1

    は私の最初のWebスクレイピングの実験のほとんどは、BS4で行われた美しいスープhttps://www.crummy.com/software/BeautifulSoup/bs4/doc/ – Mikael

    +0

    を見てみましょう。私は問題のページで重いJSの使用のためにセレンを使用してきました。 BS4を使用して私が苦労していることに対処できるかどうかがわかります。ありがとう –

    答えて

    1

    あなたの弓のために別の文字列:lxmlの。 xpath式にアクセスできるため、HTMLをナビゲートする作業が簡単になります。

    >>> from lxml import etree 
    >>> parser = etree.HTMLParser() 
    >>> tree = etree.fromstring(open('sample.htm').read(), parser) 
    >>> for td in tree.xpath('.//table/tr/td[@class="transactionTableBodyText"][1]'): 
    ...  if td.text.startswith('5250'): 
    ...   tr = td.getparent() 
    ...   td_3_link = tr.xpath('./td[3]/a') 
    ...   link = td_3_link[0].attrib['href'] 
    ... 
    >>> link 
    'http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&hdnInstance=pcl7' 
    

    あなたが見ることができるように、私はうまく機能して合理的に堅牢なようで何かに集中しようとして、私は様々なアプローチを試すことができるように、私はREPL環境を利用します。

    ほとんど忘れてしまった、これは私が解析していたHTMLです。

    <table> 
        <tr> 
         <td class="transactionTableBodyText">1000 S RAINBOW BLVD 1001 </td> 
         <td class="transactionTableBodyText" align="center">SPRING VALLEY</td> 
         <td class="transactionTableBodyText" align="center"> 
         <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a> 
         </td> 
        </tr> 
        <tr> 
         <td class="transactionTableBodyText">5250 S RAINBOW BLVD 1001 </td> 
         <td class="transactionTableBodyText" align="center">SPRING VALLEY</td> 
         <td class="transactionTableBodyText" align="center"> 
         <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a> 
         </td> 
        </tr> 
        <tr> 
         <td class="transactionTableBodyText">2000 S RAINBOW BLVD 1001 </td> 
         <td class="transactionTableBodyText" align="center">SPRING VALLEY</td> 
         <td class="transactionTableBodyText" align="center"> 
         <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a> 
         </td> 
        </tr> 
        <tr> 
         <td class="transactionTableBodyText">2000 S RAINBOW BLVD 1001 </td> 
         <td class="transactionTableBodyText" align="center">SPRING VALLEY</td> 
         <td class="transactionTableBodyText" align="center"> 
         <a id="DataGrid1__ctl3_HyperLink2" href="http://Sandgate.co.clark.nv.us/AssrRealProp/ParcelDetail.aspx?hdnParcel=16326214001&amp;hdnInstance=pcl7" target="_self">163-26-214-001</a> 
         </td> 
        </tr> 
    </table>''' 
    
    +0

    ありがとうございましたビル、私はこれを見てみましょう。私は将来のプロジェクトにも頑強で脆弱なシステムを構築しなければならないことを知っています。 –

    関連する問題