Использование BeautifulSoup для извлечения текста из div - PullRequest
0 голосов
/ 08 ноября 2018

Я использую следующий фрагмент и пытаюсь проанализировать раздел html по ссылке ниже, а именно div выглядит так:

<div id="avg-price" class="price big-price">4.02</div>
<div id="best-price" class="price big-price">0.20</div>
<div id="worst-price" class="price big-price">15.98</div>

Это код, который я пытаюсь использовать

import requests, urllib.parse
from bs4 import BeautifulSoup, element
r = requests.get('https://herf.io/bids?search=tatuaje%20tattoo')
soup = BeautifulSoup(r.text, 'html.parser')

avgPrice = soup.find("div", {"id": "avg-price"})
lowPrice = soup.find("div", {"id": "best-price"})
highPrice = soup.find("div", {"id": "worst-price"})

print(avgPrice)
print(lowPrice)
print(highPrice)
print("Average Price: {}".format(avgPrice))
print("Low Price: {}".format(lowPrice))
print("High Price: {}".format(highPrice))

Тем не менее, он не включает цену между div ... результат выглядит так:

<div class="price big-price" id="avg-price"></div>
<div class="price big-price" id="best-price"></div>
<div class="price big-price" id="worst-price"></div>
Average Price: <div class="price big-price" id="avg-price"></div>
Low Price: <div class="price big-price" id="best-price"></div>
High Price: <div class="price big-price" id="worst-price"></div>

Есть идеи? Я уверен, что упускаю из виду что-то маленькое, но сейчас я в тупике, ха-ха.

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Попробуйте

avgPrice[0].text 

В остальном сделайте то же самое.

0 голосов
/ 08 ноября 2018

конечно можно, но только тогда, когда данные не нужно рассчитывать по javascrip. СЕЙЧАС! На этом сайте вы можете использовать fiddler, чтобы выяснить, какой URL-адрес использовался javascrip для загрузки данных, затем вы можете получить json или другой файл из него. Это простой пример, после того как я использовал fiddler, чтобы узнать, откуда пришли данные. Помните, что вы должны установить verify=False при использовании сертификата Fiddler.

import requests 

with requests.Session() as se:
    se.headers = {
        "X-Requested-With": "XMLHttpRequest",
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36",
        "Referer": "https://herf.io/bids?search=tatuaje%20tattoo",
        "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
        "Accept-Encoding":"gzip, deflate, br",
        }
    data = [
        "search=tatuaje+tattoo",
        "types=",
        "sites=",
    ]

    cookies = {
        "Cookie": "connect.sid=s%3ANYNh5s6LzCVWY8yE9Gra8lxj9OGHPAK_.vGiBmTXvfF4iDScBF94YOXFDmC80PQxY%2FX9FLQ23hYI"}

    url = "https://herf.io/bids/search/open"

    price = "https://herf.io/bids/search/stats"

    req = se.post(price,data="&".join(data),cookies=cookies,verify=False)
    print(req.text)

Выход

{ "bottomQuarter": 4.4, "topQuarter": 3,31, "средний": 3,8, "означают": 4,03, "StdDev": 1,44, "МОС": 0,08, "хорошо": 2,59, "большой": 1,14, "бедные": 5,47, "плохо": 6,91, "лучший": 0,2, "худший": 15,98, "подсчет": 1121}

0 голосов
/ 08 ноября 2018

Вы можете вырезать текст, используя атрибут text:

print("Average Price: {}".format(avgPrice.text))
print("Low Price: {}".format(lowPrice.text))
print("High Price: {}".format(highPrice.text))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...