2014-07-15 5 views
0

Я пытаюсь собрать теги «a», которые находятся в class = «featured» с сайта http://www.pakistanfashionmagazine.com Я написал этот фрагмент кода, у которого нет ошибки, но он дублирует ссылки. Как я могу преодолеть это дублирование?Получение дубликатов ссылок в Скребок

from bs4 import BeautifulSoup 

import requests 

url = raw_input("Enter a website to extract the URL's from: ") 

r = requests.get(url) 

data = r.text 

soup = BeautifulSoup(data) 

results= soup.findAll('div', attrs={"class":'featured'}) 

for div in results: 
    links = div.findAll('a') 
for a in links: 
    print "http://www.pakistanfashionmagazine.com/" +a['href'] 

ответ

1

фактический HTML страница имеет две ссылки за единицу <div>; один для изображения, другой для <h4> тега:

<div class="item"> 

    <div class="image"> 
     <a href="/dress/casual-dresses/bella-embroidered-lawn-collection-3-stitched-suits-pkr-14000-only.html" title="BELLA Embroidered Lawn Collection*3 STITCHED [email protected] 14000 ONLY"><img src="/siteimages/upload/BELLA-Embroidered-Lawn-Collection3-STITCHED-SUITSPKR-14000-ONLY_1529IM1-thumb.jpg" alt="Featured Product" /></a>     </div> 

    <div class="detail"> 
     <h4><a href="/dress/casual-dresses/bella-embroidered-lawn-collection-3-stitched-suits-pkr-14000-only.html">BELLA Embroidered Lawn Collection*3 STITCHED [email protected] 14000 ONLY</a></h4> 
           <em>updated: 2013-06-03</em> 
     <p>BELLA Embroidered Lawn Collection*3 STITCHED [email protected] 14000 ONLY</p> 

    </div> 
</div> 

Limit ваши ссылки только один или другой; Я хотел бы использовать CSS selectors здесь:

links = soup.select('div.featured .detail a[href]') 
for link in links: 
    print "http://www.pakistanfashionmagazine.com/" + link['href'] 

Сейчас 32 ссылок печатаются, а не 64.

Если вам необходимо ограничить это для только второго featured раздела (красоты Советов), то сделать это; выберите featured дивы, выбрать второй из списка, а затем

links = soup.select('div.featured')[1].select('.detail a[href]') 

Теперь у вас есть только 8 ссылок в этом разделе.

+0

Код, который я написал, должен печатать только 8 ссылок, и это делается, но каждая ссылка появляется дважды. Причина, по которой вы дали, абсолютно прав. Но исправления, которые вы предложили, дают ненужные ссылки @Martijn Pieters – user3834883

+0

@ user3834883: затем * сузить его дальше *. Страница, на которую вы ссылаетесь, создает 64 ссылки, когда я загружаю ее и запускаю ваш код (с поправкой на отступ). –

Смежные вопросы