There are multiple options here:
- use regular expressions to extract data directly from the javascript
- use javascript parser to extract data directly from the javascript (e.g.
slimit
- example here)
- use
ScrapyJS
package with Splash
rendering javascript
- let a real browser execute javascript with the help of
selenium
- a browser could be headless (like PhantomJS)
If you would choose to use regular expressions, here is how you can make a dictionary of state -> list of pharmacies:
from pprint import pprint
import re
import requests
url = 'http://www.heteropharmacy.com/jScript/myScript.js'
with requests.Session() as session:
response = session.get(url)
pattern = re.compile(r"states_arr\['(\w+)'\]= new Array\((.*?)\);", re.MULTILINE | re.DOTALL)
results = {state: [item.strip()[1:] for item in pharmacies.split('",')]
for state, pharmacies in pattern.findall(response.content)}
pprint(results)
Prints:
{'Chennai': ['Adambakkam # 044 22530209 # Opp. Murugan Temple, ; Brindavan Nager, ; Mohanpuri - 5th Street, ; Adambakkam, Chennai \x96 600 088',
'Adambakkam - 2 # 044 - 22553195, 64540549 # No. 2 B, Ground Floor, Ganesh Nagar Main Road, ; Near NGO Colony Bus Stop, Telephone Colony, ; Adambakkam, Chennai - 600088.',
'Allapakkam # 044- 64520024 # New No.131, Old No.10 M, ; Shop No. F, Alapakkam Main Road, ; Near Jeva Complex, Alapakkam, Chennai-16.',
'Anna nagar # 044-26220891 # New No.1, AI Block, Second Street, ; Near Anna Adarsh College for Women, ; Shanthi Colony, Anna Nagar, ; Chennai- 600040.',
...
'Visakhapatnam': ['Adarsh Nagar # 9247001943 # H. No. 3-352, Beside Andhra Bank, ; Near Manapuram Finance Ltd. Adarsha Nagar, ; Old Dairy Form, Visakhapatnam',
'B.C. Road, Gajuwaka # 0891 2546005 # D. No.13-6-14/1, ; Opp. Dr. T. Dhanalatha Hospital, ; B. C. Road, Gajuwaka, Visakhapatnam.',
'Chinawaltair # 0891-2546001, 6464501 # D.No: 6-5-3, Opp. Jaganadh Temple, ; China Waltair, Visakapatnam-17.',
'Marripalem # 9247000573 # D. No. 38-40-70, Opp. Ramalingeswara Alayam, ; Marripalem Main Road, ; Marripalem, Visakhapatnam.',
'Muralinagar # 0891-6464507# D.No.39-8-9/5, ; Varma Complex, 48th Bus stop, ; Murali Nagar, Visakhapatnam',
'NRI Hospital # 0891-2714453, 6464506 # 50-27-16, Rammahon Chamber, ; Near NRI Hospital, ; Seethammadhara, Visakapatnam.',
'Pedawaltair # 0891-2546006 # H.No.8-1-97/2/2, ; Near Vishaka Eye Hospital, ; Pedawaltair junction, Vizag.',
'Ramnagar # 0891-2546002, 6464502 # D.No. 10-50-11/2, 1st Floor, ; Beside Care Hospital, Main Road, ; Ramnagar, Visakapatnam.',
'Seetammadhara # 0891-2713706, 6464504 # H.No: 55-14-109/1, ; Beside Sri Sivaramareddy Sweets, ; Opp to E- Seva kendram, ; Seetammadhara, Visakhapatnam."']}