Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.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
Python Can';我不知道如何';抓斗';安<;a>;使用类名称和Scrapy进行标记_Python_Html_Xpath_Web Scraping_Scrapy - Fatal编程技术网

Python Can';我不知道如何';抓斗';安<;a>;使用类名称和Scrapy进行标记

Python Can';我不知道如何';抓斗';安<;a>;使用类名称和Scrapy进行标记,python,html,xpath,web-scraping,scrapy,Python,Html,Xpath,Web Scraping,Scrapy,为了一个研究项目,我正在抓取一些中文网站,遇到了一个我无法解决的问题。使用scrapy,我试图跟踪类名为“up”的标记中的链接(该标记是导航栏中许多标记之一)。问题是CSS或Xpath选择器都不能“抓取”标记。我可以很好地获取它的父div标记,但当我尝试访问它的子项时,scrapy返回一个空列表。下面是父div及其子标记的结构: <div class="xz-page clearfix" style="margin-left:160px;"> <scri

为了一个研究项目,我正在抓取一些中文网站,遇到了一个我无法解决的问题。使用scrapy,我试图跟踪类名为“up”的标记中的链接(该标记是导航栏中许多标记之一)。问题是CSS或Xpath选择器都不能“抓取”标记。我可以很好地获取它的父div标记,但当我尝试访问它的子项时,scrapy返回一个空列表。下面是父div及其子标记的结构:

    <div class="xz-page clearfix" style="margin-left:160px;">
        <script type="text/javascript"> ... </script>
        <a class="pre" href="javascript:void(0)" style="width:40px">上一页</a>
        <a class="num sel" href="javascript:void(0)">1</a>
        <a class="num" href="index_1.html">2</a>
        <a class="num" href="index_2.html">3</a>
        <a href="javascript:void(0)" style="border:none">...</a>
        <a class="num" href="index_697.html">698</a>
        <a class="num" href="index_698.html">699</a>
        <a class="up" href="index_1.html" style="width:40px">下一页</a>&nbsp;
    </div>
它返回以下内容:

[<Selector xpath='//div[@class = "xz-page clearfix"]' data='<div class="xz-pageclearfix" style="mar'>]
或者只是为了抓住所有的孩子:

next_page=response.xpath('//div[@class=“xz page clearfix”]/a')
它返回一个空列表[]

我尝试了上述选择器的多次迭代,每次都得到一个空列表

即使只是想用这个来获取标签:

next_page=response.xpath(“//a[@class=“up”]”)
返回一个空列表

我怀疑这与script标签有关

脚本标记内的脚本如下所示:

<script type="text/javascript">
function createPageHTML(_nPageCount, _nCurrIndex, _sPageName, _sPageExt){
  if(_nPageCount == null || _nPageCount<=1){
    return;
  }

  var nCurrIndex = _nCurrIndex || 0;
  // 1 输出首页和上一页
  // 1.1 当前页是首页
  if(nCurrIndex == 0){
    document.write("<a class=\"pre\" href=\"javascript:void(0)\" style=\"width:40px\">上一页</a>");
    document.write("<a class=\"num sel\" href=\"javascript:void(0)\">1</a>");
  }
  //1.2 当前页不是首页
  else{
    var nPreIndex = nCurrIndex - 1;
    var sPreFileExt = nPreIndex == 0 ? "" : ("_" + nPreIndex);

    document.write("<a class=\"next\" href=\"" + _sPageName + sPreFileExt + "."+_sPageExt+"\" style=\"width:40px\">上一页</a>");
    document.write("<a class=\"num\" href=\""+_sPageName+"."+_sPageExt+"\">1</a>");
  }

  // 2 输出中间分页
  var flag1=true;
  var flag2=true;

  for(var i=1; i<_nPageCount; i++){

    if(i-nCurrIndex<3&&nCurrIndex-i<3||i<2||_nPageCount-i<3){
      if(nCurrIndex == i)
        document.write("<a class=\"num sel\" href=\"javascript:void(0)\">"+(i+1)+"</a>");
      else
        document.write("<a class=\"num\" href=\""+_sPageName+"_" + i + "."+_sPageExt+"\">"+(i+1)+"</a>");
    }
    else if(i-nCurrIndex>3&&flag1){
      flag1=false;
      document.write("<a href=\"javascript:void(0)\" style=\"border:none\">...</a>");
    }
    else if(nCurrIndex-i>3&&flag2){
      flag2=false;
      document.write("<a href=\"javascript:void(0)\" style=\"border:none\">...</a>");
    }
  }

  // 3 输出下一页和尾页
  // 3.1 当前页是尾页
  if(nCurrIndex == (_nPageCount-1)){
    document.write("<a  class=\"up\" href=\"javascript:void(0)\"  style=\"width:40px\">下一页</a>&nbsp;");
    //document.write("<li><a href=\""+_sPageName+"_" + (_nPageCount-1) + "."+_sPageExt+"\">尾页</a></li>");
  }
  // 3.2 当前页不是尾页
  else{
    var nNextIndex = nCurrIndex + 1;
    var sPreFileExt = nPreIndex == 0 ? "" : ("_" + nPreIndex);
    document.write("<a  class=\"up\" href=\""+_sPageName+"_" + nNextIndex + "."+_sPageExt+"\"  style=\"width:40px\">下一页</a>&nbsp;");
    //document.write("<li><a href=\""+_sPageName+"_" + (_nPageCount-1) + "."+_sPageExt+"\">尾页</a></li>");
  }

}

createPageHTML(699, 0, "index", "html");
</script>

函数createPageHTML(\u nPageCount、\u nCurrIndex、\u sPageName、\u SpageText){

如果(_nPageCount==null | | | nPageCount该按钮是必须动态创建的分页的一部分(脚本就是这样做的,显然,如果您在最后一页,“up”按钮将不指向任何内容,但如果它不是最后一页,它将指向下一页).Scrasty必须在js有机会运行和创建这些元素之前提取页面信息,这就是为什么没有结果。您需要等待整个页面加载和所有XHR请求完成。查看Selenium或使用Scrasky查找Scrasky呈现的页面是否使用splash?您需要一个处理Java的中间件吗脚本,否则将为空。请注意,该按钮是分页的一部分,必须动态创建(脚本就是这样做的,显然,如果您位于最后一页,“向上”按钮将不指向任何内容,但如果它不是最后一页,它将指向下一页).Scrasty必须在js有机会运行和创建这些元素之前提取页面信息,这就是为什么没有结果。您需要等待整个页面加载和所有XHR请求完成。查看Selenium或使用Scrasky查找Scrasky呈现的页面是否使用splash?您需要一个处理Java的中间件吗脚本,否则将为空。请参阅