从网页

时间:2015-06-02 06:48:07

标签: python regex web-scraping lxml

我想只从链接中提取纬度:" http://hdfc.com/branch-locator"使用下面给出的方法。 纬度是在名为“位置”的javascript变量中给出的。 代码是:

from lxml import html
import re

URL = "http://hdfc.com/branch-locator"
var_lat = re.compile('(?<="latitude":).+(?=")')

main_page = html.parse(URL).getroot()

lat = main_page.xpath("//script[@type='text/javascript']")[1]

ans = re.search(var_lat,str(lat))

print ans

但输出来自&#34;无&#34;。在不改变问题的方法的情况下,我应该对代码做出哪些更改?

2 个答案:

答案 0 :(得分:0)

我认为需要进行一些小改动

lat = main_page.xpath("//script[@type='text/javascript']")[1] # This should be 10 

该行

ans = re.search(var_lat,str(lat)) 

应该是

ans = re.search(var_lat, lat.text) 

str(lat)将调用对象__str__的{​​{1}}函数,该函数与lat

不同

一般来说,首先要仔细检查所有lats,然后再搜索所需的字符串。所以这应该是 -

lat.text

抱歉,编辑以修复此问题。注意:这可能不是您想要的确切解决方案 - 但应该为您提供匹配所需正则表达式的第一个实例。您可能希望进一步处理lat = main_page.xpath("//script[@type='text/javascript']") for l in lat: if l.text is None: continue # print l.text ans = re.search(var_lat,(l.text)) if ans is not None: break print ans

答案 1 :(得分:0)

我在下面编写的代码适用于网页中的嵌入式JavaScript。

from lxml import html
from json import dump
import re

dumped_data = []

class theAddress:
    latude = ""

URL = "http://hdfc.com/branch-locator"
var_lat = re.compile('(?<="latitude":").+?(?=")')

main_page = html.parse(URL).getroot()

residue = main_page.xpath("//script[@type='text/javascript']/text()")[1]
all_latude = re.findall(var_lat,residue)

for i in range(len(all_latude)):
    obj = theAddress()
    obj.latude = all_latude[i]

    dumped_data.append(obj.__dict__)

f = open('hdfc_add.json','w')
dump(dumped_data, f, indent = 1)

它还利用json模块以适当的格式存储抓取的数据。