Html-теги динамически генерируемого содержимого, не отображающие текст во время очистки - PullRequest
0 голосов
/ 12 декабря 2018

Пока я проверял информацию о продукте на веб-странице продукта myntra, такую ​​как Название, Скидка и Цена.Я использовал те же теги, что и во время проверки этой страницы в браузере Chrome, а затем вставил это в свой код. Пожалуйста, посмотрите на этот код:

import requests
import random
from fake_useragent import UserAgent
from bs4 import BeautifulSoup

def headerrs():
    """
    return different random headers
    """
    ua = UserAgent()

    head1 = {'User-Agent': ua.random,
             'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
             'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
             'Accept-Encoding': 'none',
             'Accept-Language': 'en-US,en;q=0.8',
             'Connection': 'keep-alive'
             }

    return head1



def get_html_page(link):
    """
    get product price
    :param product_page_soup: bs4 soup: soup of a product page
    :return: string
    """
    top_page = requests.get(link, headers=headerrs())
    top_soup = BeautifulSoup(top_page.content, 'lxml')
    top_details = top_soup.find('div',{'class' : 'pdp-details'})
    top_title = top_details.find('h1', {'class' : 'pdp-title'}).text.strip()
    top_discount = top_details.find('span', {'class' : 'pdp-discount'}).text.strip()
    top_price = top_details.find('b', {'class' : 'pdp-price'}).text.strip()
    print('Title : '+str(top_title)+', Discount : '+str(top_discount)+', Price : '+str(top_price))

links = 'https://www.myntra.com/amp/tunics/nayo/nayo-white--black-printed-tunic/5414881/buy'

get_html_page(links)

, но когда я запустил этот фрагмент кода, я получил этот вывод

Title : Nayo White & Black Printed Tunic, Discount : {{style.price.discount.label}}, Price : Rs. {{style.price.discounted}}

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

1 Ответ

0 голосов
/ 12 декабря 2018

Вы можете использовать URL-адрес, который страница использует для получения и обработки ответа json.

import pandas as pd
import json
import requests 
import pandas as pd
from pandas.io.json import json_normalize

res = requests.get('https://www.myntra.com/amp/api/style/5414881?__amp_source_origin=https%3A%2F%2Fwww.myntra.com').json()
res = json.dumps(res).replace('null', '""')
data = json_normalize(json.loads(res))
df = pd.DataFrame(data)
print(list(df.columns.values))
print(df[['style.brand.name','style.price.discount.label','style.price.mrp','style.price.discounted']])

Используйте 'style.name', чтобы получить, например, «Nayo White & Black Printed Tunic».


Результат (без распечатки заголовков):

enter image description here


Обзор JSON:

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...