Python Can';我不知道如何';抓斗';安<;a>;使用类名称和Scrapy进行标记
为了一个研究项目,我正在抓取一些中文网站,遇到了一个我无法解决的问题。使用scrapy,我试图跟踪类名为“up”的标记中的链接(该标记是导航栏中许多标记之一)。问题是CSS或Xpath选择器都不能“抓取”标记。我可以很好地获取它的父div标记,但当我尝试访问它的子项时,scrapy返回一个空列表。下面是父div及其子标记的结构: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
<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>
</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> ");
//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> ");
//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的中间件吗脚本,否则将为空。请参阅