Не могу понять, как "схватить" тег <a>с именем класса с помощью Scrapy - PullRequest
1 голос
/ 15 мая 2019

Я перебираю несколько китайских веб-сайтов для исследовательского проекта и столкнулся с проблемой, которую я просто не могу взломать.Используя scrapy, я пытаюсь перейти по ссылке в теге с именем класса «вверх» (этот тег является одним из многих тегов в навигационной панели).Проблема в том, что ни селекторы 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>

Ссылка, которую я пытаюсь получить, - это ссылка в последнем.

Когда я использую селектор:

next_page = response.xpath('//div[@class = "xz-page clearfix"])

Возвращает это:

[<Selector xpath='//div[@class = "xz-page clearfix"]' data='<div class="xz-pageclearfix" style="mar'>]

Но когда я пытаюсь получить доступ к тегу с этим:

next_page = response.xpath('//div[@class = "xz-page clearfix"]/a[@class ="up"]')

Или только это, пытаясь захватить всеchildren:

next_page = response.xpath('//div[@class = "xz-page clearfix"]/a')

Возвращает пустой список []

Я пробовал несколько итераций вышеупомянутого селектора, и каждый раз получал пустой список.

Даже просто пытаясь получить тег с этим:

next_page = response.xpath('//a[@class = "up"]')

Возвращает пустой список

Я подозреваю, что это как-то связано с тегом script.

Скрипт внутритег 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>

Я не знаю JS, поэтому я не совсем уверен, что делает этот код.У меня нет проблем с доступом ко всем остальным частям страницы, которую я хочу почистить, только один этот тег вызывает у меня проблемы.Это только один из китайских сайтов, с которыми у меня проблемы, однако английские источники, которые я вычищаю, не доставили мне проблем.Я не уверен, является ли проблема моей неопытностью в изучении веб-страниц или что-то необычное происходит с китайскими сайтами.

Для справки: http://www.xizang.gov.cn/xwzx/qnyw/index.html - это веб-страница, которую я пытаюсь почистить.Кнопка для перехода на следующую страницу внизу - вот что доставляет мне неприятности.

Буду очень признателен за любой совет или помощь.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...