2016-03-06 85 views
0

我正在努力從網站上抓取網址。從網站我想刮HTML代碼是:在Python中獲取HTML中的每個第二個網址

<tr> 
     <td> 
      <span> 

    <table class="search-result-ad-row" cellspacing="3" border="0"> 
    <tbody> 
     <tr> 
      <td class="picture" rowspan="2"><a title="3.izbový byt v starom meste na ulici Kpt. Nálepku" href="inzerat/RE0005055-16-000281/3-izbovy-byt-v-starom-meste-na-ulici-kpt-nalepku"><img src="/data/189/RE0005055/ads/195/RE0005055-16-000281/img/thum/37587134.jpeg" alt=""/></a> 
      </td> 
      <td class="title" colspan="2"><a title="3.izbový byt v starom meste na ulici Kpt. Nálepku" href="inzerat/RE0005055-16-000281/3-izbovy-byt-v-starom-meste-na-ulici-kpt-nalepku"><h2 style="font-size: inherit;">3.izbový byt v starom meste na ulici Kpt. Nálepku</h2></a> 
       <span></span> 
      </td> 
     </tr> 
     <tr> 

我想利用這個Python代碼來獲取href

br = mechanize.Browser() 
br.open("http://www.reality.sk/") 
br.select_form(nr=0) 
br["tabs:scrn243:scrn115:errorTooltip.cityName:cityName"]="poprad" 
br.submit() 

def hello(): 
    soup = BeautifulSoup(br.response().read()) 
    for link in soup.findAll('a'): 
     link2 = link.get('href') 
     if "inzerat/" in link2: 
      print 'http://www.reality.sk/' + link.get('href') 

但問題是,我得到2個結果每個URL(因爲有2 href屬性)。我嘗試使用table標籤,td標籤和class屬性(「圖片」或「標題」)或甚至使用rowspan(= 2)進行刮擦。但是我沒有得到理想的結果。我不知道如何使代碼工作。

+0

有一些邊緣情況或其他特定原因爲什麼你不能僅僅使用模數來'繼續'循環每個其他*迭代? – Tersosauros

+0

看來你得到了同樣的鏈接兩次。難道你不能僅僅通過一個簡單的'set'操作來過濾掉? (或者像@Tersosauros建議的那樣,通過'soup.findAll('a')[:: 2]''等方式獲得每一次迭代的鏈接) –

+0

@Tosaosauros ...說實話,我在編程方面不是很有經驗,不要考慮每一個迭代循環。但是我嘗試Gustavo Bezerra寫的 - soup.findAll('a')[:: 2],它的工作原理,所以必須感謝你。 – koaxko

回答

1

我想你在查找class選擇器時遇到了問題。你也可以連接通過查找返回的標籤 - 請看看,如果這個解決方案可以幫助(我不是100%肯定,如果這就是你想要達到的目標):

soup.find_all('table', class_='search-result-ad-row') 
for ad_table in soup.find_all('table', class_='search-result-ad-row'): 
    print ad_table.find(class_='picture').find('a').attrs['href'] 
相關問題