Мне нужно получить данные из веб-сайта, который использует фреймы - PullRequest
0 голосов
/ 27 марта 2020

Пожалуйста, я хочу, чтобы вы рассказали мне о проекте, потому что я потерян и действительно не знаю, с чего начать.

Я довольно новичок ie в Python, но я Я уже создал скрипт веб-очистки, чтобы получить некоторую информацию с некоторых веб-сайтов, используя l xml и xpath для получения данных через HTML DOM.

Но теперь клиент бросил мне вызов. ..

Этот веб-сайт использует фреймы, в которых я должен получать данные = (И я не знаю, как с этим справиться ...

И чтобы усложнить еще больше, сайт требует login: (

Если кто-то может помочь мне с какой-то информацией, например, с чего мне начать?

Можно ли получить данные с веб-сайта, который отображает данные в кадрах?

Вот веб-адрес: https://www.bulkshared.com/online-ordering

Я хочу указать сценарий на раздел «Кладовая», но URL не показывает путь = (

Вы рекомендуете мне, какой тип скрипта? Я хочу использовать Python, но я должен использовать BS? Xpath? Selenium?

Может ли кто-нибудь пожертвовать небольшую часть вашего времени, чтобы попытаться помочь мне?

Большое спасибо за ваше время, ребята!

enter image description here

enter image description here

1 Ответ

1 голос
/ 27 марта 2020
import requests
from bs4 import BeautifulSoup
import re
import csv


def Login(url):
    with requests.Session() as req:
        r = req.get(url)
        soup = BeautifulSoup(r.content, 'html.parser')
        script = soup.find("script", type="text/javascript").text
        collectionId = re.search("collectionId\":\"(.*?)\"", script).group(1)
        metaSiteId = re.search("metaSiteId\":\"(.*?)\"", script).group(1)
        svSession = re.search("svSession\":\"(.*?)\"", script).group(1)
        data = {
            'email': 'test@test.com',
            'password': 'test123',
            'collectionId': collectionId,
            'metaSiteId': metaSiteId,
            'appUrl': 'https://www.bulkshared.com/online-ordering',
            'svSession': svSession
        }
        r = req.post(
            "https://www.bulkshared.com/_api/wix-sm-webapp/member/login", data=data)
        r = req.get(
            "https://api.wixrestaurants.com/v2/organizations/5716166580714419/full").json()
        return r


def Sorter():
    data = Login("https://www.bulkshared.com/")
    with open("result.csv", 'w', newline="", encoding="UTF-8") as f:
        writer = csv.writer(f)
        writer.writerow(["Name", "Price"])
        for item in data["menu"]["items"]:
            title = item["title"]["en_AU"]
            try:
                price = item["price"]
            except:
                price = "N/A"
            try:
                description = item["description"]["en_AU"].strip()
            except:
                description = "N/A"
            writer.writerow([title, description, price])


Sorter()

Примечание: после написания кода я обнаружил, что API полностью опубликован c и не требует передачи информации о сеансе входа в систему.

Таким образом, вы можете позвонить это напрямую.

import requests
import json

r = requests.get(
    "https://api.wixrestaurants.com/v2/organizations/5716166580714419/full").json()

print(json.dumps(r, indent=4))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...