2018-05-13 爬虫笔记(四)分析JS脚本,爬取生物信息学

2018-05-14  本文已影响0人  小郑的学习笔记

前面爬文章,都是爬去静态的,这里要开始分析动态加载的网站,但是我这里还没有用到splash 渲染,因为我在分析JS脚本的时候,发现了规律,然后我用一个比较笨的办法来爬文章。话不多说,直接开始。
首先我们看博主的首页,他总共写了238篇文章


生物信息博主

但是当我们使用检查的时候,却只能看到最近发的文章,以前的没有加载出来,也就是为什么按照我之前的爬,只能爬一点点。

而且当我们下滑鼠标的时候,我们发现可以加载文章出来。

通过chrome浏览器的检查network功能,我们发现有个脚本在运作。

这个脚本与服务器发了请求

咱们看具体一点

是一个有规律的请求地址

下面的方法比较暴力,也比较笨拙,我一点一点下拉,拉倒第一篇文章为终止,也就是hello world

hello world

我发现参数是28

这个URL是有规律的 28是最后一个

那我只需要在我的爬虫中,编一个循环就OK了,话不多数说,直接上代码

    def start_requests(self):
        j = 0
        while j < 28:
            next_url = "https://www.jianshu.com/u/9ea40b5f607a?order_by=shared_at&page=" + str(j)
            j = j + 1
            yield scrapy.Request(next_url, callback=self.parse)

上面这个是核心,下面放到总的spider中去看看

import scrapy
from ..items import SpiderProjectItem
from scrapy import Request
from scrapy_splash import SplashRequest



class HoptopSpider(scrapy.Spider):
    name = 'hoptop'
    allowed_domains = ['www.jianshu.com/u/9ea40b5f607a']
    base_urls = ['http://www.jianshu.com/u/9ea40b5f607a/']


    def start_requests(self):
        j = 0
        while j < 28:
            next_url = "https://www.jianshu.com/u/9ea40b5f607a?order_by=shared_at&page=" + str(j)
            j = j + 1
            yield scrapy.Request(next_url, callback=self.parse)

    def parse(self, response):
        content = SpiderProjectItem()
        titles = response.xpath('//*[@id]/div/a/text()').extract()
        #for one in titles:
        #    content['title'] = one
        #    yield content

        #abstracts = response.xpath('//*[@id]/div/p/text()').extract()



        n = len(titles)
        i = 0
        while i < n :
            content['title'] = titles[i]
            i = i + 1
            yield content
        j = 0

然后咱们运行一下

scrapy crawl hoptop -o titles.csv

成功,但是感觉细节还是要修改一下

爬取了全部标题
上一篇下一篇

猜你喜欢

热点阅读