【问题标题】:How to extract data from javascript array using beautiful soup?如何使用漂亮的汤从 javascript 数组中提取数据?
【发布时间】:2015-08-10 14:53:16
【问题描述】:

javascript 文件如下所示:

states_arr['Chittoor']= new Array(  "Kurnool (Abbas Nagar)# 9247001529             # H. No. 80-11/111, ; Beside ICICI Bank ATM, ;  Near Krishna Nagar Railway Gate, ; Abbas Nagar,  Kurnool.","Kurnool # 9247001530 # H. No. 46/694, Near Annapurna Hotel, Opp. Govt Hospital, Budawarpet, Kurnool. "  );

我想从 js 文件中从第二个“#”符号之后开始的所有数组中提取地址,即“H. No. 80-11/111,;在 ICICI 银行 ATM 旁边,;靠近 Krishna Nagar 铁路门, ; 阿巴斯·纳加尔, Kurnool.", “H. No. 46/694, Near Annapurna Hotel, Opp. Govt Hospital, Budawarpet, Kurnool。”

以上完整的 javascript 文件可在以下位置获得: http://www.heteropharmacy.com/jScript/myScript.js

我正在使用 BeautifulSoup,这是我的错误代码:

soup = BeautifulSoup(html_doc)
script = soup.find_all("script")
pattern = re.compile(r" (?<=[0-9]\s#\s).+")
while pattern.search(script):
    line1 = pattern.search(script)
    print line1

这个文件需要转成json格式。

【问题讨论】:

  • 下面的答案有帮助吗?

标签: javascript python json beautifulsoup


【解决方案1】:

你可以只用 python 清理文件 -

假设actual_file是你刚刚打开的js文件

# Split it by newline character and remove all lines which have less than 2 
# characters since our addresses are much longer
lines_of_js = [i.strip() for i in actual_file.split("\n") if len(i)>2]

# Now, remove lines with syntaxes of javascript and keep lines which have
# `#` in address. You may want to revisit this part for further fine tuning.
lines_with_address = [line for line in y if 
                            all([i not in line for i in '(<>={}'])
                            and 
                            ('#' in line)
                            ]

lines_with-address 现在是此类地址的列表

拆分此变量中的每一行,将其拆分为# 并获取最后一项 - 这应该是您的地址:

 In [94]: [line.split('#')[-1] for line in lines_with_address]
Out[94]: 
[' D.No. 5-9-24/66/1/a, Hill fort, ; Beside MLA quarters, ; Adarsh nagar, Hyderabad",',
 ' Plot No:23/A, Addagutta, ; Co-Opp.Housing Society Ltd. Opp. JNTU, ; HMT Hills Road, Kukatpally, Hyd",',
 ' Shop No.5, Plot No.86, ; Road No. 6, Vishnavy Recidency, ; Near AXIS Bank ATM, R.K.Puram,; Alkapuri Colony, Hyderabad.",',

【讨论】:

    【解决方案2】:

    在 Python2.7 中测试

    你不需要bs4。只需使用 urllib2 或 Py3k 等价物来读取源代码。

    import re
    import urllib2
    
    dta = urllib2.urlopen('http://www.heteropharmacy.com/jScript/myScript.js').read()
    final = [i[2:].replace('",', '').strip() for i in re.findall(r'# (?:[a-zA-Z]).+', dta)]
    

    示例输出(列表):

    'H.No : 3-5-60/C-12 ; Opp. Andhra bank, ; Vivekananda Nagar Colony, ; Kukatpally, Hyderabad', "Flat No.G-6, Bhavya's Srinivasam, ; Opp. Sanghamitra School, ; Nizampet Road, Hyderabad", 'H.No. 8-2-603/B/28, ; Opp. Hyderabad kababs, ; Road No-10, Banjara hills, Hyderabad', 'H. No.1-55/C/9&10, Shop No. 9 & 10, ; Raghava Towers, Main Road, ; Madinaguda', 'beside Cyberabad Police Commisionarate Office, ; Telecom Nagar, Gachibowli, ; Hyderabad"'

    【讨论】:

    • 现在如何进一步隔离locality、landmark、city、state等各个领域的地址,并存储在json中?
    • 首先,提出一个新问题。然后第二次显示你当前的那个问题的代码。
    猜你喜欢
    • 2020-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多