1.使用 Anaconda 下载
conda install scrapy
2.使用scrapy 框架创建工程,或者是启动项目
scrapy startproject 工程名
工程目录,下图是在 pycharm 下的工程目录
这里的douban是我自己的项目名
爬虫的代码都写在 spiders 目录下,spiders->testdouban.py是创建的其中一个爬虫的名称。
1)、spiders
文件夹:爬虫文件主目录
2)、init.py
:将改文件夹变为一个python模块
3)、items.py
:定义所需要爬虫的项目
4)、middlewares.py
:爬虫中间件
5)、pipelines.py
:管道文件
6)、settings.py
:设置文件
3.在spider 文件夹内编写爬虫文件
固定结构:
from scrapy.spiders import CrawlSpider
from scrapy.selector import Selector
from scrapy.http import Request # 需要yield 请求解析时使用;抓取多页的时候使用
from 项目名.items import 项目名item
class 项目名(CrawlSpider):
name = '文件名'
# allow_domains = 'xxx' # 规定某域名
# 必写: start_urls = 列表 ,放置url字符串
start_urls = []
# 必写,负责提取内容,提交item到管道
def parse(self,response):
# 实例化item对象
item = 项目名Item()
# 可以使用正则、beautifulsoup、xpath来解析
# 准备 item,传入items 里面;将数据放到item内,用字典赋值的方式
item['key'] = key
# yield 提交
yield item
# 将 item 提交给 解析 详情页的 函数(非必写)
# Request(具体的详情页网址,callback= 指定的函数名称,meta={'item_front':item)
# 举例:
# yield Request(url,callback=self.parse_detail,meta={'item_front':item} )
# 非必写
def parse_detail(self.response):
# 从response 内把之前存入的item 提取出来
item = response.meta['item_front']
#解析
...
yield item
4 . 到 items.py里面添加字段
添加字段的格式,举例:name = scrapy.Field()
5.存储
1)使用scrapy的默认存储,相对简单
在settings.py
里面添加存储的文件名和格式,如下:
FEED_URI = '文件名.csv'
FEED_FORMAT = 'CSV'
2)自定义存储
在 pipelines.py 内
class SaveToCsv(object):
# 爬虫初始化时运行 。一般做做准备,创建文件对象
def __init__(self):
self.file = open('ip.csv','w',encoding='utf-8',newline='')
self.csvfile = csv.writer(self.file)
# 可以写入一个首行
self.csvfile.writerow(['ip地址','端口号','类型','存活时间'])
# 提交 item 的过程
def process_item(self, item, spider):
each = list(item.values())
self.csvfile.writerow(each)
return item
# 爬虫关闭时,做什么
def close_spider(self, spider):
self.file.close()
print('csv存储结束')
6. 浏览器头部与代理IP的添加
在 middlewares.py 中找到下面的方法,然后在该方法中编写:
class xxxDownloaderMiddleware()
def process_request(self, request, spider):
# 头部
# 语法:request.headers['User-Agent'] = '字符串形式的头部'
request.headers['User-Agent'] = random.choice(self.user_agent)
# 代理 ip
# 语法 request.meta['proxy'] = 'http://ip地址:端口号'
# 如:request.meta['proxy'] = 'https://171.41.80.238:9999'
return None
注意:需要在 settings.py 内打开 下载器中间件
DOWNLOADER_MIDDLEWARES = {}
7.运行代码,有两种方式
1)在命令行下运行
进入项目文件夹下,运行 scrapy crawl 爬虫文件名
2)在项目文件夹下 新建一个文件 :
如:main.py
,与spiders 文件夹同层级
固定结构:
from scrapy import cmdline
cmdline.execute('scrapy crawl 爬虫文件名'.split())
运行 main.py