欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scrapy简易使用教程

程序员文章站 2022-05-07 17:32:56
...
一、创建项目

​ scrapy startproject 项目名

二、创建爬虫实例

​ scrapy genspider 实例名 目标网址

三、启动爬虫
1. 单个文件启动:

​ scrapy runspider 实例名.py

2. 项目根目录下运行

​ 当前项目下可以运行的爬虫:scrapy list

​ scrapy crawl 爬虫名

四、取消scrapy的robot设置
ROBOTSTXT_OBEY = True

​ 将True修改成False

五、确定需要获取的内容

进入items.py 定义获取的内容

class DoubanMoiveItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    movie_name = scrapy.Field()
    nums = scrapy.Field()
    movie_url = scrapy.Field()
六、修改 setting.py 添加User-Agent防止403
DEFAULT_REQUEST_HEADERS = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36',
}
七、存入数据
  1. 导入刚才设置的items.py

    from ..items import DoubanMoiveItem
    
  2. 在需要存入数据的地方实例化

    items = DoubanMoiveItem()
    
  3. 存入数据

    items['movie_name'] = movie_name
    items['nums'] = nums
    items['movie_url'] = response.url
    

    Ps: items字典中的key值movie_name、nums、movie_url需要与之前定义的一一对应

八、保存数据到文件
  1. 修改pipelines.py文件,设置保存方式

    示例:

    class DoubanMoivePipeline(object):
        # 爬虫开始调用
        def open_spider(self, spider):
            self.file = open("items.json", 'w+', encoding="utf-8")
    
        def process_item(self, item, spider):
            self.file.write(str(item) + "\n")
            return item
    
        # 爬虫结束调用
        def close_spider(self, spider):
            self.file.close()
    
  2. 修改setting.py文件,将对应注释取消(68-70行)

    ITEM_PIPELINES = {
       'douban_moive.pipelines.DoubanMoivePipeline': 300,
    }
    
九、保存数据到数据库

修改pipelines.py 为保存Mongodb

import pymongo

class DoubanMoivePipeline(object):
    # 爬虫开始调用
    def __init__(self):
        self.client = pymongo.MongoClient(host="127.0.0.1", port=27017)
        self.db = self.client["test"]
        self.col = self.db['douban_movie']

    def process_item(self, item, spider):
        data = dict(item)
        if item:
            self.col.insert_one(data)
        return item