【问题标题】:Extract specific data from an embedded javascript in webpage从网页中嵌入的 javascript 中提取特定数据
【发布时间】:2015-06-02 06:48:06
【问题描述】:

我只想使用下面给出的方法从链接中提取纬度:“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

但输出为“无”。在不改变解决问题的方法的情况下,我应该对代码进行哪些更改?

【问题讨论】:

    标签: python regex web-scraping lxml


    【解决方案1】:

    我认为需要做一些小改动

    排队

    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)会调用对象lat__str__函数,与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
    

    抱歉,已编辑以解决问题。注意:这可能不是您想要的确切解决方案 - 但应该为您提供匹配所需正则表达式的第一个实例。您可能需要进一步处理ans

    【讨论】:

    • 不,不工作。它显示此错误: Traceback(最近一次调用最后一次):文件“hdfcspider.py”,第 13 行,在 ans = re.search(var_lat, l.text) 文件“/usr/lib/python2.7 /re.py",第 142 行,在搜索中返回 _compile(pattern, flags).search(string) TypeError: expected string or buffer
    • 已修复 - 错误 - 这不是“最终答案”,只是一种方法,应该可以帮助您解决剩下的部分。
    【解决方案2】:

    我在下面编写的代码适用于网页中的嵌入式 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 模块以适当的格式存储抓取的数据。

    【讨论】:

      猜你喜欢
      • 2015-03-15
      • 1970-01-01
      • 2021-04-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-12
      • 1970-01-01
      • 2012-07-19
      • 2018-08-14
      相关资源
      最近更新 更多