1、安装Scrapy框架
- 直接pip3 install scrapy
- 本机测试正常运行。
2.创建scrapy项目
- cd scrapy
-
cd scrapy scrapy startproject meizi New Scrapy project 'meizi', using template directory 'e:\\py3\\lib\\site-packages\\scrapy\\templates\\project', created in: F:\scrapy\meizi You can start your first spider with: cd meizi scrapy genspider example example.com
-
文件夹目录如下: |-tutorial |-scrapy.cfg |-__init__.py |-items.py |-middlewares.py |-pipelines.py |-settings.py |-spiders |-__init__.py 文件的功能: scrapy.cfg:配置文件 spiders:存放你Spider文件,也就是你爬取的py文件 items.py:相当于一个容器,和字典较像 middlewares.py:定义Downloader Middlewares(下载器中间件)和Spider Middlewares(蜘蛛中间件)的实现 pipelines.py:定义Item Pipeline的实现,实现数据的清洗,储存,验证。 settings.py:全局配置
-
然后基于basic模板创建一个名为的「jiandan」爬虫文件。
1
2
3
4
5
cd meizi
scrapy genspider -t basic jiandan jiandan.net --nolog
Created spider 'jiandan' using template 'basic' in module:
meizi.spiders.jiandan
-
Scrapy 框架目录结构
items.py 文件
items.py 文件中定义提取的 Item,这里只定义了图片地址 img_url。
1
2
3
4
5
import scrapy
class MeiziItem(scrapy.Item):
img_url = scrapy.Field()
jiandan.py 文件
-
# -*- coding: utf-8 -*- import scrapy from meizi.items import MeiziItem from selenium import webdriver import base64 chrome_driver='D:\scrapy\chromedriver.exe' browser = webdriver.Chrome(executable_path=chrome_driver) browser.maximize_window() class JiandanSpider(scrapy.Spider): name = 'jiandan' allowed_domains = ['jiandan.net'] url = "http://i.jandan.net/ooxx/" page = 1 start_urls = [url + 'MjAxOTExMTUt' + str(base64.b64encode(str(page).encode('utf-8'))) + "#comments"] def parse(self, response): browser.get(response.url) browser.implicitly_wait(15) a_list = browser.find_elements_by_link_text("[查看原图]") for a in a_list: item = MeiziItem() print(a.get_attribute('href')) item['img_url'] = a.get_attribute('href') # 提取图片链接 yield item if self.page < 38: # 最大页面数,每天可能有变动,可优化 self.page += 1 print(self.page) print(self.url + 'MjAxOTExMTUt'+str(base64.b64encode(str(self.page).encode('utf-8')), 'utf-8')) yield scrapy.Request(self.url + 'MjAxOTExMTUt'+str(base64.b64encode(str(self.page).encode('utf-8')), 'utf-8') + "#comments", self.parse,dont_filter=True)
settings.py 文件
-
ITEM_PIPELINES = {
'meizi.pipelines.MeiziPipeline': 300,
}
pipelines.py 文件
编写 Pipeline 来存储提取到的数据,保存到本地。
保存到本地
在本地新建好保存图片的路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 | import requests
class MeiziPipeline(object): # 保存到本地 count = 1
def process_item(self, item, spider): result = requests.get(item['img_url']) with open("E:\\img\\jiandan\\" + str(self.count) + ".jpg", 'wb') as f: f.write(result.content) f.close() self.count += 1 return item |
运行爬虫框架
有两种方法可运行,我用的是第二种。
1. cmd 中输入命令运行
1 | scrapy crawl jiandan |