Я пытаюсь выполнить простой просмотр веб-страниц, используя python, но есть проблема с получением названий ссылок, поскольку в одном и том же классе btn есть от 2 до 3 href заголовков, как указано ниже, тогда как мне нужен только первый печатается для каждого нового вхождения в l oop.
btn
href
#!/usr/bin/python3 from bs4 import BeautifulSoup import requests url = "https://www.learndatasci.com/free-data-science-books/" # Getting the webpage, creating a Response object. response = requests.get(url) # Extracting the source code of the page. data = response.text # Passing the source code to BeautifulSoup to create a BeautifulSoup object for it. soup = BeautifulSoup(data, 'lxml') # Extracting all the <a> tags into a list. tags = soup.find_all('a', class_='btn') # Extracting URLs from the attribute href in the <a> tags. for tag in tags: print(tag.get('href'))
Вывод из вышеприведенного кода:
http://www.cin.ufpe.br/~tfl2/artificial-intelligence-modern-approach.9780131038059.25368.pdf http://www.amazon.com/gp/product/0136042597/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0136042597&linkCode=as2&tag=learnds-20&linkId=3FRORB7P56CEWSK5 http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf http://amzn.to/1WePh0N http://www.e-booksdirectory.com/details.php?ebook=9575 http://amzn.to/1FcalRp
При желании Вывод:
http://www.cin.ufpe.br/~tfl2/artificial-intelligence-modern-approach.9780131038059.25368.pdf http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf http://www.e-booksdirectory.com/details.php?ebook=9575
BeautifulSoup имеет отличную CSS поддержку , просто используйте это, чтобы выбрать каждый нечетный элемент :
soup = BeautifulSoup(data, 'lxml') for tag in soup.select('a.btn:nth-of-type(odd)'):
Демо:
>>> for tag in soup.select('a.btn:nth-of-type(odd)'): print(tag['href']) ... http://www.cin.ufpe.br/~tfl2/artificial-intelligence-modern-approach.9780131038059.25368.pdf http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf http://www.e-booksdirectory.com/details.php?ebook=9575 ... etc
У вас есть родительский элемент <div class="book"> на группу ссылок, который вы можете использовать:
<div class="book">
for tag in soup.select('.book a.btn:first-of-type'):
, который будет работать для любого количества ссылок на книгу.