美文网首页Scrapyscrayp爬虫程序员
python爬虫之微打赏(scrapy版)

python爬虫之微打赏(scrapy版)

作者: 罗罗攀 | 来源:发表于2017-07-28 16:42 被阅读733次

    上次写到单线程的微打赏爬虫,知道微打赏需要用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
    
    

    结果如图:


    相关文章

      网友评论

      本文标题:python爬虫之微打赏(scrapy版)

      本文链接:https://www.haomeiwen.com/subject/igkflxtx.html