Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Scrapy xpath未提取包含特殊字符的div<;%=_Javascript_Python_Html_Scrapy - Fatal编程技术网

Javascript Scrapy xpath未提取包含特殊字符的div<;%=

Javascript Scrapy xpath未提取包含特殊字符的div<;%=,javascript,python,html,scrapy,Javascript,Python,Html,Scrapy,我是个新手。我正在尝试从以下URL提取h2文本:'https://www.tysonprop.co.za/agents/" 我有两个问题: 我的xpath可以访问script元素,但在script标记中找不到h2或div元素。我甚至尝试过将HTML文件保存到我的机器上,然后删除这个文件,但同样的问题也发生了。我已经三次检查了我的xpath代码,看起来一切正常 当网站显示在我的浏览器中时,branch.branch_名称解析为“Tysen Properties总部”。如何获得值(即“Tysen

我是个新手。我正在尝试从以下URL提取h2文本:'https://www.tysonprop.co.za/agents/"

我有两个问题:

  • 我的xpath可以访问script元素,但在script标记中找不到h2或div元素。我甚至尝试过将HTML文件保存到我的机器上,然后删除这个文件,但同样的问题也发生了。我已经三次检查了我的xpath代码,看起来一切正常

  • 当网站显示在我的浏览器中时,branch.branch_名称解析为“Tysen Properties总部”。如何获得值(即“Tysen Properties总部”)而不是变量名(branch.branch\u name)

  • 我的Python代码:
    HTML摘录如下:

    <script type="text/html" id="id_branch_template">
      <div id="branch-<%= branch.id %>" class="clearfix margin-top30 branch-container" style="display: none;">
        <h2 class="grid_12 branch-name margin-bottom20"><%= branch.branch_name %></h2>
        <div class="branch-agents container_12 first last clearfix">
          <div id="agents-list-left" class="agents-list left grid_6">
          </div>
          <div id="agents-list-right" class="agents-list right grid_6">
          </div>
        </div>
      </div>
    </script>
    

    脚本内的
    div
    标签是文本。 要将其作为html,可以执行以下操作:

    从scrapy.selector导入选择器
    ....
    def解析(自我,响应):
    script=Selector(text=response.xpath('//script[@id=“id\u branch\u template”]/text()).get())
    div=script.xpath('./div[contains(@class,“分支容器”)]))
    h2=div.xpath('.//h2[包含(@class,“分支名称”)]/text()).extract()
    产生{'branchName':h2}
    

    但是请注意,
    h2
    不包含任何文本,因此您的结果将是一个空数组

    Does
    branch。branch\u name
    看起来像JSON格式的地址?是否有呼叫加载您正在查找的数据?也许,让我看看

    通过浏览浏览器开发工具,您可以在“网络”选项卡中找到请求,并在请求之间进行搜索,您将看到哪些加载的数据正是您要查找的数据。因此:

    导入json
    进口羊瘙痒
    
    TysonSpider类(scrapy.Spider):
    名称='tyson_spider'
    
    def启动请求(自):
    url='1〕https://www.tysonprop.co.za/ajax/agents/?branch_id=25'
    生成scrapy.Request(url=url,callback=self.parse)
    
    def解析(self,response):
    json_data=json.loads(response.text)
    branch_name=json_数据['branch']['branch_name']
    产生{'branchName':分支名称}
    
    HTML代码是:script type=“text/HTML”id=“id\u branch\u template”>谢谢,这当然有帮助!我如何到达h2标题的部分?branch.branch\u在我的浏览器中查看站点时,名称解析为一个值-是否可以提取该值?要提取该值,您必须使用
    selenium
    splash
    ,或者您可以查看chrome上的“网络”选项卡并尝试在那里找到该值,我想这些信息来自一个AJAX调用。谢谢@Moein Kameli,这正是我需要的帮助。衷心感谢。
    <script type="text/html" id="id_branch_template">
      <div id="branch-<%= branch.id %>" class="clearfix margin-top30 branch-container" style="display: none;">
        <h2 class="grid_12 branch-name margin-bottom20"><%= branch.branch_name %></h2>
        <div class="branch-agents container_12 first last clearfix">
          <div id="agents-list-left" class="agents-list left grid_6">
          </div>
          <div id="agents-list-right" class="agents-list right grid_6">
          </div>
        </div>
      </div>
    </script>