Python запросов на публикацию - парсинг веб-страниц - PullRequest
0 голосов
/ 14 июля 2020

Итак, я пытаюсь получить доступ к некоторым данным для сканирования веб-страниц. Однако я застрял при достижении точки извлечения графика с этого сайта , где я хочу отредактировать период времени данных, наблюдаемый в приведенном ниже коде. Есть ли способ извлечь или изменить этот фрагмент из активного data-timeperiod = "today" в data-timeperiod = "week"?

Для получения дополнительной информации я попытался получить доступ к вкладке сети в chrome чтобы изменить это с помощью почтового запроса, но каждый раз, когда мне отказывают в доступе.

<div class="fLeft">
    <ul class="chartsTimeperiod cleanList floatList clearFix buttonPane">
        <li class="active">
                <a href="#" data-timeperiod="today" class="active default">
                    1 d.</a>
            </li>
        <li class="">
                <a href="#" data-timeperiod="week" class="">
                    1 v.</a>
            </li>
        <li class="">
                <a href="#" data-timeperiod="month" class="">
                    1 mån.</a>
            </li>
        <li class="">
                <a href="#" data-timeperiod="three_months" class="">
                    3 mån.</a>
            </li>
        <li class="">
                <a href="#" data-timeperiod="this_year" class="">
                    i år</a>
            </li>
        <li class="">
                <a href="#" data-timeperiod="year" class="">
                    1 år</a>
            </li>
        <li class="last">
                <a href="#" data-timeperiod="three_years" class="">
                    3 år</a>
            </li>
        </ul>
</div>

На вкладке «Сеть» я вижу, что есть полезная нагрузка запроса, содержащая следующие данные. Это то, что я должен использовать для доступа к данным, или я ошибаюсь?

{"orderbookId":842107,"chartType":"AREA","widthOfPlotContainer":558,"chartResolution":"MINUTE","navigator":true,"percentage":false,"volume":false,"owners":false,"timePeriod":"week","ta":[],"compareIds":[19002]}

Вопрос 2 - Пример: На основе this

<form method="get" class="forumPagerForm">
        <label for="pageSizeSelect" class="fLeft marginTop5px">Visa antal inlägg:</label> 
        <select id="pageSizeSelect" class="pageSizeSelect">
            <option >15</option>
            <option >25</option>
            <option >50</option>
            <option >75</option>
            <option >100</option>
            <option selected="selected">200</option>
        </select>

        
    </form>

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы хотите получить баллы из графика, да? Если вы измените разрешение графика - скажем, «неделя» на «месяц» - и посмотрите на регистратор сетевого трафика c, вы увидите, что браузер отправляет HTTP-запрос POST на https://www.avanza.se/ab/component/highstockchart/getchart/orderbook.

Просто имитируйте этот запрос. Здесь разрешение графика установлено на "week", но вы можете изменить его на "month" и т.д. c. Затем делаю запрос и печатаю первые десять точек:

def main():

    import requests

    url = "https://www.avanza.se/ab/component/highstockchart/getchart/orderbook"

    data = {
        "chartResolution": "MINUTE",
        "chartType": "AREA",
        "compareIds": [19002],
        "navigator": True,
        "orderbookId": 842107,
        "owners": False,
        "percentage": False,
        "ta": [],
        "timePeriod": "week",
        "volume": False,
        "widthOfPlotContainer": 558
    }

    response = requests.post(url, json=data)
    response.raise_for_status()

    data = response.json()

    for y, x in data["dataPoints"][0:10]:
        print(x, y)

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

Вывод:

None 1594103400000
8.36 1594105200000
8.4 1594107000000
8.26 1594108800000
8.3 1594110600000
8.42 1594112400000
8.54 1594114200000
8.5 1594116000000
8.52 1594117800000
8.6 1594119600000
>>> 
1 голос
/ 14 июля 2020

Попробуйте:

import requests

janson = {
    "orderbookId": '842107',
    "chartType": "AREA",
    "widthOfPlotContainer": '558',
    "chartResolution": "MINUTE",
    "navigator": 'true',
    "percentage": 'false',
    "volume": 'false',
    "owners": 'false',
    "timePeriod": "week",
    "ta": [],
    "compareIds": ['19002']
}
s = requests.Session()
s.get('https://www.avanza.se/aktier/om-aktien.html/842107/gabather')
p = s.post('https://www.avanza.se/ab/component/highstockchart/getchart/orderbook', json=janson)
print(p)

И после этого очистите переменную p

...