在学习scrapy练习爬取网站内容的时候,经常会遇到翻页问题。今天把用过的翻页方法总结一下:
翻页人类操作一般有两种方法(1)点击下一页(2)输入页码,然后跳转。
那么对于机器
1、使用selenium库模拟
(1)模拟点击“下一页”按钮。使用selenium库模拟点击,这种方法就相当于我们点击“下一页”按钮,经过等待页面显示完全,抓取页面中需要的数据,然后再模拟点击,以此类推,直到抓取所有页码的数据。这种方法可以抓取少量的数据,这也是selenium库的一个缺点,就是抓取速度比较慢,一旦抓取大量数据很少用到这种。
(2)模拟输入页码,然后跳转。对于我们来说这样可能比较繁琐,但对于计算机却更直接。同样我们在对应的地方模拟输入“1,2,3……”这些数字,然后点击跳转,与第一条一样,也能实现翻页抓取数据。
2、拿到页码的链接,再做一次请求
因为每次翻页,对应的url是不一样的,我们可以分析该网页的不同页之间的url有什么不一样。就我目前遇到的两种说一下:
(1)页码在斜杠后面,如第一页:www.csdn.net/ai/1(链接自己瞎编的)这样我们可以对‘/’后面的数字进行一个循环,每次跳转到不同的页,然后进行抓取。
(2)不同页的链接要稍微复杂点,如第一页:www.scdn.net/ai-y1/,这种我们可以试着找到对应点击“下一页”的HTML代码里的href有没有对应的相对链接。如:/ai-y2/,有的话,我们只需要补齐成绝对链接,使用urljoin()方法,跳转到该页就能进行抓取了。
----更新----(2018.6.22)
3、当翻页url不变时,可以分析ajax请求,看看有没有变化。具体操作是打开浏览器‘检查’-->network-->js-->点击‘下一页’。然后观察有没有多出新的ajax请求,并分析该ajax请求里的request url 。例如: