如何让scrapy跟随javascript生成的url?

2024-10-01 02:20:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在这个网站上抓取新闻:new.scut.edu.cn 但是在它的子网站,比如this,右下角的下一个页面(中文的第一个)url是由javascript生成的。下一页的html源代码是<a name="_l_p_n" href="javascript:if(true){a_next('/s/22/t/4/p/69/c/7/i//list.htm');}" title="进入下一页">下一页</a>,引用脚本是

var _currentPageIndex =346;
var _listArticleCount =-1;       
var _listPaginationCount =-1; 
function a_next(url) {           
if(_currentPageIndex > 1) {               
location.href =url.replace('i/','i/'+(_currentPageIndex-1));
}                
}

我要抓取所有页面,所以蜘蛛需要跟随下一页。这是我的小蜘蛛代码:

^{pr2}$

我发现当前页面的url和下一个页面的url只有一个数字不同。 我知道有一些解决方案,可以模拟javascript逻辑或者使用selenium和phantomjs之类的库。我如何通过模拟js逻辑的方式来修复这些糟糕的spider代码以跟踪下一页?需要改变蜘蛛屑规则吗?以硒或幻影的方式呢? 提前谢谢


Tags: 代码urlnewif网站var方式页面
1条回答
网友
1楼 · 发布于 2024-10-01 02:20:27

我想提出一种不渲染javascript,而是从页面中提取javascript信息的方法。在

您可以在list-pages之后向您的Rule添加一个parse_list回调

rules = (
    Rule(LinkExtractor(allow=(r"http://news.scut.edu.cn/s/22/t/.+/list.*")), callback = "parse_list"),
    Rule(LinkExtractor(allow=(r"http://news.scut.edu.cn/s/22/t/.+/info.*")), callback = "parse_item")
)

并在回调中实现一个regex来解析javascript并获得(列表的)总页数:

^{pr2}$

如果有一个page_Number,你可以在一个循环中创建所有的页码链接(一直到第一页),并将这些requests传递给爬虫程序。在

上面显示的代码不起作用,但可以作为起点。在

相关问题 更多 >