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,
}