我想只从链接中提取纬度:" 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;。在不改变问题的方法的情况下,我应该对代码做出哪些更改?
答案 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模块以适当的格式存储抓取的数据。