初识scrapy.

--创建scrapy项目

    进入目标文件夹右键开启命令行, 输入scrapy startproject xxxx(项目名). 然后就可以出现以下的目录:

            (笔者菜鸡以vscode为例):

             创建一个名为zhihuproject的项目.

             

            那怎么运行? 怎么使用呢?  做个示范, 往spiders里创个文件。  (只是简单的使用)

            例如: 笔者在spiders里创个zhihuspider.py

            由于知乎还是需要请求头的.(模拟浏览器发出请求) 所以先往settings.py里加上USER_AGENT。如下:

            

            

            我们在刚建的zhihuspider.py打些代码运行看看。

import scrapy


class ZhihuSpider(scrapy.Spider):
    name = 'zhihu_essence'

    def start_requests(self):
        urls = ['https://www.zhihu.com/topic/19552832/top-answers?page=1']
        
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        page = response.url.split("/")[-2]
        filename = '%s.html' % page
        with open(filename, 'wb') as f:
            f.write(response.body)
        self.log('saved file %s' % filename)


name必须为唯一.意思是name='zhihu_essence', 这个zhihu_essence在scrapy文件夹项目里必须为唯一。

因为运行的时候需要它. 敲完代码.我们在命令行里进入到第一个zhihuproject.(因为创建scrapy项目的时候如上面第一个图,有两个zhihuproject)。

--运行scrapy

       进入到第一个zhihuproject 。然后输入scrapy crawl zhihu_essence  回车.. (这就是name为什么要唯一了)

    这时候命令行里出现这个200的话代表访问成功.上面的代码主要功能是下载url里的源代码.


    此时会多出一个html文件.跟scrapy.cfg同目录下.


    从文件夹里双击打开这个html.此时页面就被我们拉下来咯.


--用scrapy进行爬虫 

    当然,这只是一个简单的使用. 但我们需要的是爬虫,,,用scrapy爬虫(爬取所要的数据)而不是拉整个网站(对现在来说没意义的)!!!

    还是以这个项目为例.

    首先我们对items.py进行编写.

    此时我们的items.py的内容如下:

    

    title,user,user_info,content 都初始化为scrapy.Field对象.(为什么呢? 我的感觉像是字典的键. 这个ZhihuprojectItem继承于scrapy.Item类, 实例化后像个字典, 而title,user,user_info,content为这个字典的键)//也许就是字典-。-

    写完items.py  我们到编写zhihuspider.py  对zhihuspider.py内容进行修改.修改如下:

import scrapy
from scrapy.selector import Selector
from zhihuproject.items import ZhihuprojectItem


class ZhihuSpider(scrapy.Spider):
    name = 'zhihu_essence'

    def start_requests(self):
        urls = ['https://www.zhihu.com/topic/19552832/top-answers?page={}'.format(str(i)) for i in range(1,2)]
        
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        item = ZhihuprojectItem()
        selector = Selector(response)
        infos = selector.xpath('//div[@class="List-item TopicFeedItem"]')
        for info in infos:
            try:
                title = info.xpath('div/h2/div/a/text()').extract_first()
                user = info.xpath('div/div[@class="Popover"]/div/a/text()').extract_first()
                if not user:
                    user = '知乎用户'
                user_info = info.xpath('div/div[@class="RichText AuthorInfo-badgeText"]/text()').extract_first()
                if not user_info:
                    user_info = 'none'
                
                content = info.xpath('div/div[2]/div').xpath('string(.)').extract()
                
                item['title'] = title
                item['user'] = user
                item['user_info'] = user_info
                item['content'] = content
                yield item
            except IndexError:
                pass           


素质爬虫~ 只是试探 所以只爬一页~  此时可以试探运行这个scrapy项目了.

命令行进入到第一个zhihuproject. 输入命令scrapy crawl zhihu_essence跑起来!!

     

    这样就可以拿到想要的信息了. 但是这好像只是在命令行里显示出来。 那我们怎么把它保存下来呢?

    这我们就要编写pipelines.py文件了 .    pipelines.py主要用于爬虫数据的处理..放入数据库啊或者写入文本csv啊都可以

    我们以放入mongo数据库为例.

    pipelines.py编写如下:

    

    再然后就是配置setting.py了. 之前已经加了USER-AGENT. 那我们在它之后再加上几个..如下:

    

    然后命令行跑起来~ scrapy crawl zhihu_essence~ (记得打开mongodb的服务器)

    然后打开robomongo(对Mongodb的可视化应用)..就可以看到爬取来的信息了.

    

    当然我只爬了page=1的. 要想爬更多,只需要把zhihuspider.py 构造urls的时候 把page设的更大.



    (欢迎纠正错误~ 笔者菜鸡刚学scrapy~)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值