javascript - 如何使用 re() 使用 scrapy 从 javascript 变量中提取数据?

标签 javascript python regex web-scraping scrapy

我的 items.py 文件是这样的:

from scrapy.item import Item, Field

class SpiItem(Item):
    title = Field()
    lat = Field()
    lng = Field()
    add = Field()

蜘蛛是:

import scrapy
import re

from spi.items import SpiItem

class HdfcSpider(scrapy.Spider):
    name = "hdfc"
    allowed_domains = ["hdfc.com"]
    start_urls = ["http://hdfc.com/branch-locator"]

    def parse(self,response):
        addresses = response.xpath('//script')
        for sel in addresses:
            item = SpiItem()
            item['title'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="title":).+(?=")')
            item['lat'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="latitude":).+(?=")')
            item['lng'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="longitude":).+(?=")')
            item['add'] = sel.xpath('//script[@type="text/javascript"][1]').re('(?<="html":).+(?=")')
            yield item

整个javascript代码,查看页面源码,写在里面://html/body/table/tbody/tr[348]/td[2]

为什么我的代码不起作用? 我只想提取项目文件中提到的四个字段。

最佳答案

不是使用正则表达式逐字段提取,而是提取完整的 locations 对象,通过 json.loads() 加载它并从您将获得的 Python 字典中提取所需的数据:

def parse(self,response):
    pattern = re.compile(r"var locations= ({.*?});", re.MULTILINE | re.DOTALL)
    locations = response.xpath('//script[contains(., "var locations")]/text()').re(pattern)[0]
    locations = json.loads(locations)
    for title, data in locations.iteritems():
        print title

关于javascript - 如何使用 re() 使用 scrapy 从 javascript 变量中提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30574102/

相关文章:

python 子类化 : TypeError object. __new__() 不带参数

regex - 使用正则表达式忽略时,Bash "diff"实用程序将文件显示为不同

javascript - 如何通过调整大小重新加载文档?

javascript - 为什么 setTimeout 不适用于 React Redux 中的异步操作创建者?

javascript - jquery ajax [object Object] [object Object] 在列表中输出

regex - 在Unix中格式化日期以包括日期(st,nd,rd和th)的后缀

java - 在java中表示字符串中的自定义属性

javascript - 如何在同一页面一键刷新两个表单

Python - 获取 n 个一维数组中所有可能的元素总和

python - 如何将用户输入转换为列表?