Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from datetime import datetime
- import asyncio
- import requests
- from bs4 import BeautifulSoup
- import aiohttp
- from aiohttp import ClientSession
- import async_timeout
- from contextlib import closing
- async def search(session: ClientSession, start: str, end: str, limit: int, attempt: int = 0):
- params = {
- 'product': 'web',
- 'start_time': str(start),
- 'end_time': str(end),
- 'uid': '100004464721185',
- 'user_lat': "37.7876582",
- 'user_lng': "-122.39051549999999",
- 'lat': "37.7876582",
- 'lng': "-122.39051549999999",
- 'distance': 8,
- 'max_total_price': 400,
- 'transmission': 'AUTOMATIC',
- 'category':'suv_or_jeep,minivan,hatchback_or_wagon,cargo_van',
- 'properties': 'car_id,car_name,car_photo_v2,carkit_enabled,distance,latitude,longitude,make,model,postcode,price_daily,price_hourly,price_weekly,total_price,timezone,year,dedicated_parking',
- 'sort': 'best',
- 'page_sort': 'magic',
- 'page_size': limit
- }
- headers = {
- 'Accept':'application/json, text/javascript, */*; q=0.01',
- 'Accept-Encoding':'gzip, deflate, br',
- 'Accept-Language':'en-US,en;q=0.9,ko-KR;q=0.8,ko;q=0.7',
- 'Origin':'https://www.getaround.com',
- 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
- 'Referer':'https://www.getaround.com/search?start_time=2018-02-16T19:30:00.000Z&end_time=2018-02-20T05:00:00.000Z&max_total_price=398&category=suv_or_jeep,minivan,cargo_van&transmission=automatic&viewport='
- }
- # async with async_timeout.timeout(10):
- async with session.get('https://index.getaround.com/v1.0/search', params=params, headers=headers) as response:
- assert response.status == 200
- json = await response.json()
- cars = json['cars']
- return cars
- async def lookup_features(session, car_name):
- # async with async_timeout.timeout(10):
- async with session.get("https://www.getaround.com/{}".format(car_name)) as response:
- assert response.status == 200
- body = await response.text()
- parser = BeautifulSoup(body, 'html.parser')
- features = parser.select('#content #description table tr td')
- return {feature.text.strip() for feature in features}
- # async def search_cars(start: str, end: str, limit: int):
- async def lookup_and_print(session, car, start, end, attempts = 0):
- try:
- features = await lookup_features(session, car['car_name'])
- if 'All-wheel drive' in features or '4-wheel drive' in features:
- print('"{}", "{}", "{}", "{}", "{}", "https://www.getaround.com/{}?start_time={}&end_time={}&use=CARSHARE"'.format(
- car['car_name'], car['total_price'], car['distance'], car['year'], car['make'],
- car['car_name'], start, end))
- except aiohttp.client_exceptions.ClientConnectorError as e:
- if attempts > 3:
- raise Exception(e)
- return await lookup_and_print(session, car,start,end, attempts + 1)
- async def main():
- session = aiohttp.ClientSession(loop=loop)
- begin = '2019-03-23T01:00:00.000Z'
- end = '2019-03-25T04:00:00.000Z'
- cars = await search(session, begin, end, 500)
- print('"car_name", "total_price", "distance", "year", "make"')
- await asyncio.gather(*[lookup_and_print(session, car, begin, end) for car in cars])
- # session.close()
- loop = asyncio.get_event_loop()
- loop.run_until_complete(main())
- loop.close()
- # for car in search_cars(begin, end, 500):
- # car_name = car['car_name']
- # features = car['features']
- # is_4wd = 'All-wheel drive' in features or '4-wheel drive' in features
- # if is_4wd:
- # print('{}, {}, {}, {}, {}'.format(car['car_name'], car['total_price'], car['distance'], car['year'], car['make']))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement