Scrapy实战一:GET方法爬取CSDN主页动态数据

声明:本人也是一个爬虫新手,有些地方可能写的并不好,望各位大佬见谅。

第一步:抓包

因为是动态页面,所以我们需要通过抓包来找到每次发送的请求内容,以及接口url。
1.这里采用了FIddler工具进行抓包,滚动CSDN主页,查看第一次刷新出来的数据:
这里写图片描述

2.接下来查看Fiddler工具抓到的请求数据以及接口url:
这里写图片描述
发送的请求数据:
这里写图片描述

3.拿到接口url后,放到浏览器上访问一下:

https://www.csdn.net/api/articles?type=more&category=home&shown_offset=1517142889684478 

这里写图片描述

emmm…有数据就好,就不进行转码了,肯定是和Fiddler工具抓到的json内容一样的。

4.分析接口url:
这里写图片描述

猜想:红线是类型,类型为more。
     黄线是类别,类别应该是首页的意思。
     蓝线是参数,看到这种数字首先想到的可能就是时间戳。

5.定义要抓取内容:
这里写图片描述

前期准备工作结束。接下来就开始写代码

第二步:码代码

1.创建好了spider工程以后,先写items.py:

import scrapy


class CsdnhomepageItem(scrapy.Item):
    # 作品类型
    article_type = scrapy.Field()
    # 发布时间
    created_time = scrapy.Field()
    # 作者
    nick_name = scrapy.Field()
    # 文章标题
    article_title = scrapy.Field()
    # 文章链接
    article_link = scrapy.Field()

2.编写CsdnspiderSpider.py:
这个文件在建立工程的时候没有新建,所以需要自己创建。
这里写图片描述

import scrapy
import time
import json
from CSDNHomePage.items import CsdnhomepageItem


class CsdnspiderSpider(scrapy.Spider):
    # 爬虫名称
    name = 'CSDNSpider'
    allowed_domains = ['https://www.csdn.net/']

    def start_requests(self):
        # 这里规定只爬10次
        for i in range(0, 10):
            # 拿到当前时间戳 拼接成url
            url_time = int(time.time() * 1000000)
            url = "https://www.csdn.net/api/articles?type=more&category=home&shown_offset=" + str(url_time)
            # 发送请求 在pares中处理最后的返回结果
            yield scrapy.Request(url, callback=self.parse)

    def parse(self, response):
        # 拿到json数据
        datas = json.loads(response.text)["articles"]
        for data in datas:
            # 将我们需要的数据都解析出来 并交给CsdnhomepagePipeline管道处理
            item = CsdnhomepageItem()
            item["article_type"] = data['category']
            item["created_time"] = data['created_at']
            item["nick_name"] = data['nickname']
            item["article_title"] = data['title']
            item["article_link"] = data['url']
            yield item

3.编写pipeline.py:
这个文件要做对数据的保存等操作。

import json


class CsdnhomepagePipeline(object):
    def __init__(self):
        # 初始化一个文件
        self.file_name = open("CSDN首页文章信息.json", "w")

    def process_item(self, item, spider):
        # 这里是将item先转换成字典,在又字典转换成字符串
        # json.dumps转换时对中文默认使用的ascii编码.想输出真正的中文需要指定 ensure_ascii=False
        # 将最后的item 写入到文件中
        text = json.dumps(dict(item), ensure_ascii=False) + "\n"
        self.file_name.write(text)
        return item

    def close_spider(self):
        self.file_name.close()

4.修改setting.py文件:
为了启用Item Pipeline组件,必须将它的类添加到 settings.py文件ITEM_PIPELINES 配置:
这里写图片描述
在setting文件中ITEM_PIPELINE默认是被注释掉的,我们只需要释放出来就好了。其他地方不用管。

第三步:执行

因为我这里用的是PyCharm编写的Scrapy,所以再执行的时候可以有两种方法执行:

1.创建py文件执行:
这里写图片描述

创建一个py文件,名字可以随便起,主要是内容:

from scrapy import cmdline
# CSDNSpider爬虫名称
cmdline.execute("scrapy crawl CSDNSpider".split())

右键选择运行文件就好了。
2.在终端中敲”scrapy crawl CSDNSpider“,回车就好了:
这里写图片描述

第四步:结果

在同目录下会多一个json格式的文件,打开瞅瞅:
这里写图片描述

emmm…正是想要的结果

第五步:总结

主要学习了一下使用Pycharm使用Scrapy来爬取Ajax页面,看着并不是很难。
如果有哪里写错了的,请多多指教!

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值