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 条评论
登录 后参与评论

相关文章

来自专栏互联网杂技

全面理解HTTP

引言:作为一名软件工程Web专业学生,对于HTTP的熟悉掌握是必不可少的,特此做记录,打造自己的HTTP栈。 URL与URI 我们经常接触到的就是URL了,它...

3856
来自专栏Linyb极客之路

前端性能优化归纳总结篇

关于前端性能优化的总结,随处都可以看到这方面的文章,而优化方法,也无外乎那些“固定”方面,当然,有些方面已经过时,所以,在这里,我自己也总结一遍吧,加深理解,也...

953
来自专栏mini188

学点HTTP知识

不学无术 又一次感觉到不学无术,被人一问Http知识尽然一点也没答上来,丢人丢到家了啊。平时也看许多的技术文章,为什么到了关键时刻就答不上来呢? 确实发现一个问...

1868
来自专栏腾讯NEXT学位

当我们在谈论HTTP缓存时我们在谈论什么

1963
来自专栏BeJavaGod

数据源从druid迁移到HikariCP

最近正好在做新项目,使用的是druid数据源,也真是巧,有朋友建议我使用HikariCP这个数据源,可以说是牛的一笔,速度快的飞起,性能极高!

1204
来自专栏码洞

鲜为人知的HTTP协议头字段详解大全

HTTP Header非常之多,很少有人能完全分清这些Header到底是干什么的。鉴于RFC文件规范艰深晦涩难懂,本文对协议规范中列出的HTTP Header进...

661
来自专栏程序猿DD

从零开始的Spring Session(一)

新媒体管家 Session和Cookie这两个概念,在学习java web开发之初,大多数人就已经接触过了。最近在研究跨域单点登录的实现时,发现对于Sessio...

1928
来自专栏图像识别与深度学习

《HTML5实战》Lesson11

Week12  2016/11/30上午1-4节 一、复习 二、使用地图 1、window.navigator 对象包含有关访问者浏览器的信息。 JavaS...

1963
来自专栏PHP技术

浏览器缓存机制浅析

原文出处: 韩子迟 浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如: Expires; Cache-control等)。但是也有非HTTP协议...

3184
来自专栏玩转JavaEE

axios请求封装和异常统一处理

当前后端分离时,权限问题的处理也和我们传统的处理方式有一点差异。笔者前几天刚好在负责一个项目的权限管理模块,现在权限管理模块已经做完了,我想通过5-6篇文章,来...

1K7

扫码关注云+社区