BeautifulSoup - Найти ссылку в этом HTML - PullRequest
0 голосов
/ 08 мая 2019

Вот мой код, чтобы получить HTML

from bs4 import BeautifulSoup
import urllib.request
from fake_useragent import UserAgent

url = "https://blahblah.com"
ua = UserAgent()
ran_header = ua.random
req = urllib.request.Request(url,data=None,headers={'User-Agent': ran_header})
uClient = urllib.request.urlopen(req)
page_html = uClient.read()
uClient.close()

html_source = BeautifulSoup(page_html, "html.parser")
results = html_source.findAll("a",{"onclick":"googleTag('click-listings-item-image');"})

Отсюда results содержит различные списки, содержащие различную информацию. Если я тогда print(results[0]):

<a href="https://blahblah.com//link//asdfqwersdf" onclick="googleTag('click-listings-item-image');">
    <div class="results-panel-new col-sm-12">
        <div class="row">
            <div class="col-xs-12 col-sm-3 col-lg-2 text-center thumb-table-cell">
                <span class="eq-table-new text-center"><img class="img-thumbnail" src="//images/120x90/7831a94157234bc6.jpg" /></span>
            </div>
            <div class="col-xs-12 hidden-sm hidden-md col-lg-1 text-center thumb-table-cell">
                <span class="eq-table-new text-center"><span class="hidden-sm hidden-md hidden-lg">Year: </span>2000</span>
            </div>
            <div class="col-xs-12 hidden-sm hidden-md col-lg-2 text-center thumb-table-cell">
                <span class="eq-table-new text-center">Fake City, USA</span>
            </div>
            <div class="col-xs-12 col-sm-3 col-lg-2 text-center thumb-table-cell">
                <span class="eq-table-new text-center"><span class="hidden-sm hidden-md hidden-lg">Price: </span>$900</span>
            </div>
        </div>
        <div class="row">
            <div class="hidden-xs col-sm-12 table_details_new"><span>Descriptive details</span></div>
        </div>
    </div><!-- results-panel-new -->
</a>

Я могу получить изображение, год, местоположение и цену, выполнив следующие действия:

ModelYear = results[0].div.find("div",{"class":"col-xs-12 hidden-sm hidden-md col-lg-1 text-center thumb-table-cell"}).span.text

Как получить самый первый href от results[0]?

Ответы [ 3 ]

1 голос
/ 08 мая 2019

На основе обсуждения в чате ссылка href выглядит просто: results[0]['href'].

1 голос
/ 08 мая 2019

Вы можете использовать find_all( , href=True)

например:

results[0].find_all('a', href=True)[0]
0 голосов
/ 08 мая 2019

Ваш селектор возвращает элемент тега a, как показано на распечатке. Так что да, вы просто напрямую обращаетесь к href с помощью results[0]['href']. Вы также можете сказать это, так как вся панель (карта, отображающая листинг) на странице является интерактивным элементом. Если вы хотите сделать это более понятным, вы можете изменить селектор для результатов на #js_thumb_view ~ a. Это также более быстрый селектор.

results = html_source.select('#js_thumb_view ~ a')

Тогда все ссылки, например, с

links = [result['href'] for result in results]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...