python爬虫的框架scrapy思路

cd 文件目录(进入到你的一个文件中)

scrapy startproject 项目名字

cd 项目名字 (进入这个爬虫项目)

scrapy genspider (-t crwal) 爬虫名字

运行爬虫:scrapy crawl 爬虫名字

 

先注释掉allowed_domains

settings的四条基本设置

ROBOTSTXT_OBEY = False

LOG_LEVEL = 'ERROR'

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.182 Safari/537.36'

REFERER = 'https://www.qiushibaike.com'

不使用管道直接进行持久化到文件中(仅支持7类后缀):'json', 'jsonlines', 'jl', 'csv', 'xml', 'marshal', 'pickle'

scrapy crawl 爬虫名 -o 文件名

 

通过管道进行存储

1.写items文件

class Douban250Item(scrapy.Item):
    # define the fields for your item here like:
    title = scrapy.Field()
    link = scrapy.Field()
    quote = scrapy.Field()

2.写pipeline文件

    def process_item(self, item, spider):
        print("持久化存储")
        spider.fp.write(item['title'] + '    ' + item['quote'])
        return item

3.设置setting文件,这里可以使用多个管道同时存储,只要在设置中打开管道就行

ITEM_PIPELINES = {
   'douban250.pipelines.Douban250Pipeline': 300,
}

4.写sipder文件(爬虫里写上开启文件和关闭文件__closed__)

from douban250.items import Douban250Item

item = Douban250Item()
            item['title'] = movie_name
            item['link'] = detail_link
            item['quote'] = movie_quote
            yield item

5.执行项目即可

 

如果是写到数据库里,就需要在pipeline文件里写上

# 管道文件中一个管道类对应将一组数据或流存储到一个平台或媒介上
class SQLPipeline(object):
    conn = None
    cursor = None

    # 重写父类的方法,这个方法仅在spider开始的时候会执行一次
    def open_spider(self, spider):
        print("开始数据库爬虫")
        # 这里加上charset='utf-8'数据库就连接不上,报错,所以必须保证sql的编码格式是utf-8
        self.conn = pymssql.connect(server='127.0.0.1', port='1434', database='TestDb', user='xsx',
                                    password='123456789')

    # 重写父类的方法,这个方法仅在spider结束的时候会执行一次
    def close_spider(self, spider):
        print("结束数据库爬虫")
        self.cursor.close()
        self.conn.close()

    def process_item(self, item, spider):
        author = item['title']
        content = item['quote']

        # 创建执行sql的事务对象
        self.cursor = self.conn.cursor()
        # 执行sql
        try:
            # 这里需要改成str转换过后的,而且需要把values中间的单引号加上,双引号不行
            sql = "insert into Scrapy values('" + str(author) + "','" + str(content) + "')"
            print("sql====" + sql)
            self.cursor.execute(sql.encode('utf-8'))
            self.conn.commit()
        except Exception as e:
            print(e)
            self.conn.roolback()
        finally:
            return item

最后只需去setting中写上这个管道就行

 

posted @ 2021-02-24 15:07  峰豪  阅读(90)  评论(0)    收藏  举报