Skip to content

Instantly share code, notes, and snippets.

@faisalburhanudin
Created September 28, 2017 04:25
Show Gist options
  • Select an option

  • Save faisalburhanudin/62ba352e24db7e16816070f4572c3c9c to your computer and use it in GitHub Desktop.

Select an option

Save faisalburhanudin/62ba352e24db7e16816070f4572c3c9c to your computer and use it in GitHub Desktop.
from typing import List
import lxml.html
import requests
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/detail")
def get_url():
url = request.args.get("url")
session = requests.Session()
detail_page = session.get(url)
detail_tree = lxml.html.fromstring(detail_page.content)
title = detail_tree.xpath("//h1[@class='product-name']/text()")
title = str(title[0]) if title else ""
rate = detail_tree.xpath("//span[@class='percent-num']/text()")
rate = float(rate[0]) if rate else 0
orders = detail_tree.xpath("//span[@class='order-num']/text()")
orders = int(str(orders[0]).replace(" orders", "")) if orders else ""
price = detail_tree.xpath("//span[@itemprop='price']/text()")
price = float(price[0]) if price else 0
low_price = detail_tree.xpath("//span[@itemprop='lowPrice']/text()")
low_price = float(low_price[0]) if low_price else 0
high_price = detail_tree.xpath("//span[@itemprop='highPrice']/text()")
high_price = float(high_price[0]) if high_price else 0
feedback_url = detail_tree.xpath("//div[@class='ui-tab-pane']/iframe/@thesrc")
feedback_url = "https:" + str(feedback_url[0]) if feedback_url else ""
feeds = feedback(session, feedback_url) if feedback_url else []
response = {
"title": title,
"rate": rate,
"orders": orders,
"price": price,
"low_price": low_price,
"high_price": high_price,
"feedback": feeds
}
return jsonify(response)
def feedback(session, iframe_src: str) -> List:
feed_page1 = session.get(iframe_src)
feed_page1_tree = lxml.html.fromstring(feed_page1.content)
page = map(lambda x: int(x), feed_page1_tree.xpath("//a[@class='ui-goto-page']/@pageno"))
urls = []
for i in page:
u = iframe_src + "&page=%i"
urls.append(u % i)
feeds = []
for u in urls:
feedback_page = requests.get(u)
feedback_tree = lxml.html.fromstring(feedback_page.content)
items = feedback_tree.xpath("//div[@class='feedback-item clearfix']")
for item in items:
text = item.xpath("div/div/dl/dt/span/text()")
feeds.append({
"rate": str(item.xpath("div/div/span/span/@style")[0]).replace("width:", "").replace("%", ""),
"text": str(text[0]) if text else "",
"create_on": str(item.xpath("div/div/dl/dd[@class='r-time']/text()")[0])
})
return feeds
app.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment