scrapy框架安装及简单例程

1. 安装scrapy爬虫框架

命令行pip install scrapy

.

一般会出现twisted安装失败的信息,原因是没有获取正确的windows版本,这时候到https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载twisted,打开链接后直接ctrl+F搜索Twisted,下载对应版本,比如我是64位Windows

然后到下载目录cmd执行:pip install Twisted‑18.7.0‑cp36‑cp36m‑win_amd64.whl

之后再次执行pip install scrapy即可,如果有其他安装不上的,自己下载安装包,操作如上。

2.使用scrapy爬取简书专题信息

(1)爬取内容分析

https://www.jianshu.com/recommendations/collections?utm_medium=index-collections&utm_source=desktop

需求:爬取该页的热门专题信息,包括标题、简介、文章数、关注数。

拉到最底下可以看到加载更多,点击之后并没有刷新界面而是直接加载出来了,证明这部分内容使用的是ajax异步加载。

如何获取异步加载链接?

使用F12(或者ctrl+shift+i)打开谷歌自带的工具,切换到network栏目,

点击网页最底下的加载更多按钮,发现network的name那一栏出现新的链接:

多重复几次会发现在框出的2的位置会递增,所以每次加载我们只要修改链接的数字就行

接下来使用谷歌工具的选取功能,分析如何获取想要的数据

点击标题部分

工具栏会出现对应的代码

右键高亮处选择Copy->Copy XPath,多个要获取的内容依次得到如下信息

//*[@id="list-container"]/div[1]/div/a[1]/h4

//*[@id="list-container"]/div[1]/div/a[1]/p

//*[@id="list-container"]/div[1]/div/div/a

//*[@id="list-container"]/div[1]/div/div/text()

可以直接使用这个相对路径获取信息,观察也可发现这几部分都在class="collection-wrap"的div下

所以也可以使用这个div的相对路径获取。

3.创建工程及编写代码

进入工程目录输入scrapy startproject + 工程名字,创建工程

打开工程目录

分析下目录结构(红框处为自建文件),主要文件有四个:

(1)items.py 定义爬取字段

(2)piplines.py 爬虫数据处理,入库

(3)setting.py 项目设置

(4)jianshuspider.py 用户自建文件,编写爬虫逻辑

代码部分不做详解,直接上,

items.py代码:

# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

from scrapy.item import Item,Field


class JianshuItem(Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    name = Field()
    content = Field()
    article = Field()
    fans = Field()

(2)piplines.py(使用Mongodb数据库,没有的话可以直接写到txt文件里)

使用数据库:

import pymongo

class JianshuPipeline(object):
    def __init__(self):
        client = pymongo.MongoClient('localhost', 27017)
        mydb = client['mydb']
        jianshu = mydb['jianshu']
        self.post = jianshu
    def process_item(self, item, spider):
        info = dict(item)
        self.post.insert(info)
        return item

使用txt文件:

class XiaozhuPipeline(object):
    def process_item(self, item, spider):
        fp = open('F:/wxx/testpycode/jianshu/jianshu/jianshu.txt','a+')#文件路径自己改
        fp.write(item['name']+'\n')
        fp.write(item['content']+'\n')
        fp.write(item['article']+'\n')
        fp.write(item['fans']+'\n')
        fp.close()
        return item

(3)setting.py

BOT_NAME = 'jianshu'

SPIDER_MODULES = ['jianshu.spiders']
NEWSPIDER_MODULE = 'jianshu.spiders'

USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'#设置代理
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 3#设置爬虫每一页的间隔
ITEM_PIPELINES = {
   'jianshu.pipelines.JianshuPipeline': 300,
}

(4)jianshuspider.py

from scrapy.spiders import CrawlSpider
from scrapy.selector import Selector
from scrapy.http import Request
from jianshu.items import JianshuItem

class jianshu(CrawlSpider):
    name = 'jianshu'
    start_urls = ['https://www.jianshu.com/recommendations/collections?page=1&order_by=hot']
    
    def parse(self,response):
        item = JianshuItem()#创建对象
        selector = Selector(response)
        infos = selector.xpath('//div[@class="collection-wrap"]')#同一个div下的数据

        for info in infos:#获取数据
            name = info.xpath('a[1]/h4/text()').extract()[0]
            content = info.xpath('a[1]/p/text()').extract()
            article = info.xpath('div/a/text()').extract()[0]
            fans = info.xpath('div/text()').extract()[0]

            if content:
                content = content[0]
            else:
                content = ''

            item['name'] = name
            item['content'] = content
            item['article'] = article
            item['fans'] = fans

            yield item

        urls = ['https://www.jianshu.com/recommendations/collections?page={}&order_by=hot'.format(str(i)) for i in range(2,21)]#配置链接,只爬取20页
        for url in urls:
            yield Request(url, callback=self.parse)

(5)main.py

from scrapy import cmdline

cmdline.execute('scrapy crawl jianshu'.split())#调用命令行,也可以不创建该文件,直接在工程目录使用命令行执行scrapy crawl jianshu

执行main.py即可得到结果,结果打印,数据库也会插入相应的数据

 

以上所有知识来源于网易云课堂《看文档学爬虫》,干货满满的视频课,只是整理总结了一下,有误请纠正,互相学习谢谢~!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值