python爬虫之微打赏(scrapy版)创建项目itemssettingsweidashangspider保存为csv文件

上次写到单线程的微打赏爬虫,知道微打赏需要用post请求,那今天看看如何用scrapy完成post请求。

创建项目

打开cmd,输入以下代码即可创建scrapy项目。

scrapy startproject weidashang
cd weidashang
scrapy genspider weidashangspider wds.modian.com

第二、三行用于创建spider,这样就不用自己在编辑器中手动新建。

items

import scrapy

class WeidashangItem(scrapy.Item):
    name = scrapy.Field()
    nickname = scrapy.Field()
    money = scrapy.Field()
    pass

settings

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'

加入请求头。

weidashangspider

import scrapy
import json
import math
from weidashang.items import WeidashangItem


class WeidashangspiderSpider(scrapy.Spider):
    name = "weidashangspider"
    allowed_domains = ["wds.modian.com"]
    start_urls = ['http://wds.modian.com/']

    def start_requests(self):
        for i in range(1, 10):
            params = {
                'ajaxtype': '1',
                'page': str(i),
                'category': '1',
                'pageSize': '8'
            }
            yield scrapy.FormRequest(url='https://wds.modian.com/ajax_first',formdata=params,callback=self.parse)

    def parse(self, response):
        json_data = json.loads(response.text)
        des = json_data['des']
        for data in des:
            name = data['name']
            id = data['id']
            pay_count = data['pay_count']
            all_page = math.ceil(int(pay_count) / 20)
            for i in range(1, int(all_page) + 1):
                params = {
                    'pro_id': id,
                    'type': '1',
                    'page': str(i),
                    'pageSize': '20'
                }
                yield scrapy.FormRequest(url='https://wds.modian.com/ajax_backer_list',formdata=params,meta={'name':name},callback=self.parse_item)

    def parse_item(self,response):
        item = WeidashangItem()
        item['name'] = response.meta['name']
        json_data = json.loads(response.text)
        datas = json_data['data']
        for data in datas:
            nickname = data['nickname']
            money = data['total_back_amount']
            item['nickname'] = nickname
            item['money'] = money
            yield item
  • 通过start_requests函数首先请求网页,这里使用scrapy的FormRequest方法,这样就实现了POST请求,然后回调parse方法。
  • parse函数用于解析网页的信息,然后回调parse_item函数,这里是跨页面的爬虫,我们使用meta来实现。
  • parse_item函数用于爬取网页详细页的信息。

保存为csv文件

这里使用最简单的存入数据的方法,我们在pycharm中打开Terminal,如图。

输入以下命令即可运行爬虫及保存数据到csv文件中。

cd weidashang
scrapy crawl weidashangspider -o weidashang.csv

结果如图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏攻城狮的动态

iOS面试题梳理(三)

3807
来自专栏Python中文社区

多线程爬取斗图网站,赶紧上车

專 欄 ? ❈致Great,Python中文社区专栏作者 博客: http://www.jianshu.com/u/261e23a40f71 ❈ 最近看了Py...

24010
来自专栏农夫安全

sqlmap被ban了ip怎么办

sqlmap被ban了ip怎么办 第一种办法 好不容易挖到的注入点,结果总是因为请求速度过快被ban掉ip,我觉得可以给sqlmap加个代理池!暑假前的想法,...

6686
来自专栏落花落雨不落叶

vue+sass 下sass不能运行问题

3778
来自专栏蓝天

定时取指定进程内存脚本

格式(利用了awk给外部变量赋值,请参考博文http://blog.chinaunix.net/uid-20682147-id-3024853.html):

942
来自专栏WindCoder

通过Js判断客户端为PC端还是手持设备

Js中获取浏览器信息字符串只要使用navigator.userAgent即可,这样我们再利用indexof来判断版本或其它信息了。

5222
来自专栏Python爬虫与算法进阶

Hi,这里是我的爬虫笔记

平时有个习惯,会把自己的笔记写在有道云里面,现在做个整理。会长期更新,因为我是BUG制造机。 解析 xpath提取所有节点文本 <div id="test3"...

3585
来自专栏龙首琴剑庐

Python之多线程爬虫抓取网页图片

目标 嗯,我们知道搜索或浏览网站时会有很多精美、漂亮的图片。 我们下载的时候,得鼠标一个个下载,而且还翻页。 那么,有没有一种方法,可以使用非人工方式自动识别并...

4815
来自专栏我是攻城师

深入理解Java8并发工具类StampedLock

StampedLock类是JDK8里面新增的一个并发工具类,这个类比较特殊,在此之前我们先简单的了解一下关于数据库或者存储系统的锁策略和机制。

1702
来自专栏惨绿少年

磁盘管理 之 parted命令添加swap,文件系统

第1章 磁盘管理 1.1 必须要了解的。 1.1.1 ps aux 命令中 RSS 与VSZ的含义 rss 进程占用的物理内存的大小 单位:kb ;   ...

2790

扫码关注云+社区

领取腾讯云代金券