scrapy框架的入门使用

1.首先在命令行下执行mkvirtualenv <project name>用以新建项目的环境

2.在环境下下载scrapy框架执行,在环境下执行pip install scrapy,其中在win10环境下安装会报错,会出现Twisted安装出错的提示。因此要在安装scrapy前安装好相应版本的Twisted包点击下载。安装好Twisted包后,再安装scrapy就不会运行出错了!

3.因为在pycharm中没有新建scrapy项目的能力,所以要在你想建立项目的地方,在此环境下利用命令行建立新的项目,代码是scrapy startproject <项目名>

4.首先确定需要爬取得目标字段,在item.py文件中使用name = scrapy.Field()

5.在项目的spider文件夹下面新建爬虫的py文件,使用代码scrapy genspider <项目名> <目标网址>,此时就可以开始写爬虫的逻辑了,正则匹配/xpth等逻辑就在此.py文件中书写
注:爬虫名不可以跟项目名字重复
6.如何运行爬虫呢?用到这个命令scrapy crawl <爬虫名>,运行时会报ImportError: No module named 'win32api',其实就是win32api这个包没有,安装即可,但是要这么安装pip install pywin32,完事后上面的scrapy crawl <爬虫名>就可以运行了。

7.可是运行完之后又会报403的错误,具体如下

2018-09-19 20:36:23 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <403 https://movie.douban.com/top250>: HTTP status code is not handled or not allowed

,这个是豆瓣的反爬虫机制的原因,这里要对setting.py文件中的USER_AGENT进行修改。点开网址豆瓣top250,f12然后找到user_agent复制到setting中。

8.另外一种运行爬虫的方法就是在项目中建立.main文件

from scrapy.cmdline import execute

import sys
import os

sys.path.append(os.path.dirname(os.path.abspath(__file__)))
execute(["scrapy", "crawl", "douban_spider"])

9.谷歌有一款xpath工具可以在线匹配地址
10..extract_first()是提取其中的第一个,.extract()是提取所有
11.解析完了数据,要将数据yield到pipeline中
12.设置完代理ip或者user_agent之后一定要在setting中配置好DOWNLOADER_MIDDLEWARES,代理ip和useragent的优先级要不一样
13.将数据存入到mysql数据库中
以下是pipeline.py中的代码

import MySQLdb


class FirstScrapyPipeline(object):
    def __init__(self):
        # 连接数据库
        self.connect = MySQLdb.connect(
            host='127.0.0.1',
            #数据库名字
            db='article_spider',
            user='root',
            passwd='root',
            charset='utf8',
            use_unicode=True)
        self.cursor = self.connect.cursor()

    def process_item(self, item, spider):
        cursor = self.cursor
        #douban是表名
        sql = 'insert into douban(serial_number, movie_name, introduce, star, evaluate, dect) values (%s,%s,%s,%s,%s,%s)'
        cursor.execute(sql, (
            item['serial_number'], item['movie_name'], item['introduce'], item['star'], item['evaluate'],
            item['dect'],
            ))
        self.connect.commit()

        return item

同时还要设置setting中的配置

ITEM_PIPELINES = {
   'first_scrapy.pipelines.FirstScrapyPipeline': 1,
}

猜你喜欢

转载自blog.csdn.net/qq_37002901/article/details/82779085