####1、安装scrapy
建议:最好在新的虚拟环境里面安装scrapy
注意:博主是在 Ubuntu18.04 + Python3.6 环境下进行开发的,如果遇到安装scrapy不成功请自行百度/谷歌解决

pip install scrapy

顺便装上iPython 这样方便操作scrapy shell

pip install ipython

####2、scrapy入门讲解
先附上爬取原理图

(1)创建项目

通过指令来进行创建的
scrapy startproject firstSpider(项目名称)

(2)项目目录结构

firstSpiderfirstSpiderspiders           爬虫目录(写代码位置)__init__.py   表示这是一个Python模块first.py      爬虫文件__init__.pyitems.py          定义数据结构地方middlewares.py    中间件pipelines.py      管道文件settings.py       项目配置文件scrapy.cfg
     通过指令创建爬虫文件cd firstSpider/firstSpiderscrapy genspider qiubai "www.qiushibaike.com"那么就会在firstSpider/firstSpider/spiders里面自动创建一个qiubai.pyname: 爬虫的名字,启动的时候根据爬虫的名字启动项目allowed_domains:允许的域名,就是爬取的时候这个请求要不要发送,如果是该允许域名之下的url,就会发送,如果不是,则过滤掉这个请求,这是一个列表,可以写多个允许的域名start_urls:爬虫起始url,是一个列表,里面可以写多个,一般只写一个def parse(self, response): 这个函数非常重要,就是你以后写代码的地方,parse函数名是固定的,当收到下载数据的时候会自动的调用这个方法,该方法第二个参数为response,这是一个响应对象,从该对象中获取html字符串,然后解析之。【注】这个parse函数必须返回一个可迭代对象

(3)定制items.py,其实就是您的数据结构,格式非常简单,复制粘贴即可
(4)打印response对象,简单跑一把

来到终端下:
cd firstSpider/firstSpider/spiders
scrapy crawl qiubai根据response获取网页内容
response.text    字符串类型
response.body    二进制类型

(5)运行,直接通过命令导出json格式

scrapy crawl qiubai -o qiubai.json
scrapy crawl qiubai -o qiubai.xml
scrapy crawl qiubai -o qiubai.csv

(6)scrapy shell 的使用

scrapy shell运行在终端的工具,用来调试scrapy简单使用# 注意不能在已近创建好的scrapy目录下操作,否则返回的response为 none(1)scrapy shell "http://www.xiaohuar.com/hua/"response对象属性text:字符串格式的htmlbody:二进制格式的htmlurl:所请求的urlstatus:响应的状态码方法:xpath(): 根据xpath路径获取符合的路径所有selector对象(是scrapy自己封装的一个类的对象)的列表css(): 根据选择器获取符合选择器要求的所有selector对象的列表获取内容的时候要这么写#detail-list > li .header > a > div > .name::text获取属性的方法要这么写#detail-list > li .header > a > div > .name::attr("data-src")下面接着extract()即可  一般不使用这个,因为中间scrapy会将这个选择器给翻译成xpath再去解析selector对象xpath('./'): 从当前节点向下开始查找 css(): 和上面的response的方式一样extract(): 将对象转化为unicode字符串,供你的代码使用extract_first(): 理论上相当于上面的  name_list.extract()[0] == name_list.extract_first()但实际上,extract_first()要比extract()强大,如果xpath没有获取到内容,extract_first()会返回None(2)item对象官方的这个Item其实就是一个类字典的对象,或者你就可以叫做它就是一个字典,用的时候和字典的用法一模一样将这个对象转化为字典pp = dict(p)

####3、实战-爬取校花网图片资源
1、settings.py文件的配置

# 使用的请求ua
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0(Macintosh;IntelMacOSX10.6;rv:2.0.1)Gecko/20100101Firefox/4.0.1'# 是否遵循国际爬虫条例,个人写的爬虫不需要遵循
# Obey robots.txt rules
ROBOTSTXT_OBEY = False# 设置的请求头
# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',# 'Accept-Language': 'en',
}# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
# 表示使用管道 这里300表示处理的优先级
# 你也可以自己再写一部分管道,然后设置优先级处理
ITEM_PIPELINES = {'huaproject.pipelines.HuaprojectPipeline': 300,
}
####剩余配置默认即可

2、items.py文件的处理

import scrapyclass HuaprojectItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# 需要的数据现在这里制定好,因为在settings里面已近设置好了,所以可以和pipelines联系在一块处理数据# 图片链接image_url = scrapy.Field()# 名字name = scrapy.Field()# 大学school = scrapy.Field()# 喜欢数like = scrapy.Field()

3、关键爬虫文件xiaohua.py的处理

import scrapy
# 导入数据结构类
from huaproject.items import HuaprojectItemclass XiaohuaSpider(scrapy.Spider):name = 'xiaohua'allowed_domains = ['www.xiaohuar.com']# 基础urlurl = 'http://www.xiaohuar.com/list-1-'# 爬取的起始页page = 0# 爬取的起始urlstart_urls = ['http://www.xiaohuar.com/hua/list-1-0.html']# 定义的方法,注意这个方法名不能修改,传入的参数也不能修改,否则会出错def parse(self, response):# print(100)# 解析所有校花,获取指定内容div_list = response.xpath('//div[@class="item masonry_brick"]')# print(div_list)# 遍历上面所有的div,找到指定的内容即可for div in div_list:# 创建item对象 就是我们在items里面定义的类item = HuaprojectItem()image_url = div.xpath('./div[@class="item_t"]/div[@class="img"]/a/img/@src').extract_first()# 处理周半仙图片是以.php结尾的if image_url.endswith('.php'):image_url = image_url.replace('.php', '.jpg')# 拼接图片的全路径image_url = 'http://www.xiaohuar.com' + image_urlname = div.xpath('./div[@class="item_t"]/div[@class="img"]/span[@class="price"]/text()').extract_first()school = div.xpath('./div[@class="item_t"]/div[@class="img"]/div[@class="btns"]/a/text()').extract_first()like = div.xpath('./div[contains(@class,"item_b")]//em[@class="bold"]/text()').extract_first()# 将上面提取的属性保存到对象中item['image_url'] = image_urlitem['name'] = nameitem['school'] = schoolitem['like'] = like# 将该item对象返回yield item# url = 'http://www.xiaohuar.com/hua/list-1-'# page = 0# 当处理完第一页的时候,要接着发送请求,处理下一页self.page += 1if self.page <= 11:url = self.url + str(self.page) + '.html'# 再次的发送请求,并且指定回调处理函数进行处理对应的请求yield scrapy.Request(url=url, callback=self.parse)

4、pipelines.py文件的处理

import json
import os
import urllib.requestclass HuaprojectPipeline(object):# 重写构造方法,在这打开文件def __init__(self):# 文件的打开写到这里,仅会执行一次self.fp = open('xiaohua.json', 'w', encoding='utf-8')def open_spider(self, spider):pass# 在这里处理每一个itemdef process_item(self, item, spider):# 将这个对象转化为字典obj = dict(item)# 将图片下载到本地# 获取当前目录的绝对路径file_root_path = os.path.dirname(os.path.abspath(__file__))# 拼接需要保存的路径img_dir_path = os.path.join(file_root_path, 'spiders/images')# 判断这个目录是否已经存在,不存在就自动创建is_have_img_dir = os.path.exists(img_dir_path)if is_have_img_dir:passelse:os.mkdir(img_dir_path)# 获取图片后缀名suffix = os.path.splitext(obj['image_url'])[-1]# 拼接文件名filename = obj['like'] + '_' + obj['school'] + '_' +  obj['name'] + suffix# 将文件路径和文件名拼接出来文件的全路径filepath = os.path.join(img_dir_path, filename)# 下载图片urllib.request.urlretrieve(obj['image_url'], filepath)# 将obj转化为字符串string = json.dumps(obj, ensure_ascii=False)self.fp.write(string + '\n')return item# 重写这个方法,在关闭spider的时候将文件资源关闭def close_spider(self, spider):self.fp.close()

5、最后附上项目地址
git@gitee.com:aeasringnar/xiaohuaproject.git

Python爬虫框架 scrapy 入门经典project 爬取校花网资源、批量下载图片相关推荐

  1. [ Python ] 爬虫类库学习之 xpath,爬取彼岸图网的 小姐姐 图片

    安装:pip install lxml 实例化一个etree对象 from lxml import etree 1.将本地的html文档中的源码数据加载到etree对象中 etree.parse(fi ...

  2. Python爬虫框架Scrapy 学习笔记 2 ----- 爬取Mininova网站种子文件信息

    1. 任务描述 目标网站:http://www.mininova.org/yesterday/ 目标网站截图: ------------------------------------- 可以看到种子 ...

  3. python数据分析案例2-1:Python练习-Python爬虫框架Scrapy入门与实践

    本文建立在学习完大壮老师视频Python最火爬虫框架Scrapy入门与实践,自己一步一步操作后做一个记录(建议跟我一样的新手都一步一步进行操作). 主要介绍: 1.scrapy框架简介.数据在框架内如 ...

  4. Python爬虫:正则表达式爬取校花网

    #正则表达式爬取校花网 # 网址 url = 'http://www.xiaohuar.com' #分页爬取大学校花图片共16页640张美图 1.导入模块 import requests import ...

  5. scrapy 爬取校花网

    原文链接: scrapy 爬取校花网 上一篇: scrapy 安装和简单命令 下一篇: scrapy 腾讯 招聘信息爬取 网址,爬取名称和对应的图片链接,并保存为json格式 http://www.x ...

  6. 使用Xpath爬取校花网,致敬10年前的校花『和』我们逝去的青春

    使用xpath爬取校花网 难点: 1.各个分类栏目下的页码url不统一 2.只取前三页,或者后三页 文章代码仅使用xpath和requests,本来想用scrapy框架的,但是偷了个懒. 所以就-哈哈 ...

  7. pycharm 爬取校花网

    1 1:什么是爬虫 2 定义:狭义:模拟浏览器,浏览网页,保存数据的程序 3 定义:广义:自动下载网络数据(网页,游戏,qq)的程序 4 打开校花网 'www.xiaohuar.com/hua/' # ...

  8. python爬虫——使用requests库和xpath爬取猎聘网职位详情

    文章目录 前言 一.页面分析 1.职位列表页面分析 2.职位详情页面URL获取 3.职位详情页面分析 至此,所有页面解析完毕,开始写代码. 二.代码编写 1.导入相应库 2.设置代理和随机请求头 3. ...

  9. Python爬取校花网,妈妈再也不会担心我不给她发女朋友照片了

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 极客导航 即可关注,每个工作日都有文章更新. 一.概况 上一篇我们用一个表情网站入门了爬虫,爬了很多表情.今天我们继续在爬的路上,今天 ...

最新文章

  1. CSDN湘苗培优|高起点步入职场,快人一步!
  2. pg_dump 详解/使用举例
  3. Activity Stack
  4. c语言 1或0 结果,C语言中,在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”。()...
  5. 日记——2019-03-08
  6. Linux应用服务导致系统负载过高问题排查
  7. python 线性回归 技术方案亮点_基于Python的线性回归实战
  8. JavaScript学习05 定时器
  9. 解决uni-app官方弹框popup关闭不了问题;/pages/extUI/popup/popup;uni-app弹框popup打开调用事件。unin-app弹框封装;
  10. Win10右键没有压缩选项的解决教程
  11. canvas笔记-画三角形并计算其外心(含算法其他绘图框架类似)
  12. 项目class第十四周项目一:动物学叫
  13. openGauss与PostgreSQL分区策略语法测试
  14. C#中机密文本的保存方案
  15. c# equals与==的区别(转载)
  16. Linux 分区简介
  17. linux dma大块内存,宋宝华:Linux内核的连续内存分配器(CMA)——避免预留大块内存...
  18. matlab中zeros()函数与ones()函数用法
  19. Visual Studio 2013 旗舰版正式版密钥
  20. 是时候适配 Swift 3 了吗——专访 LINE iOS 开发工程师王巍

热门文章

  1. php响应微信发送的token验证,ThinkPHP 3.2.3响应微信发送的Token验证失败
  2. MIT 18.06 线性代数公开课笔记 Lecture07Ax=0: 主变量, 特解
  3. 计算机坏了用英语怎么说,电脑坏了是什么意思
  4. IOS应用程序自身的本地化
  5. Exponential distribution 指数分布【转自Math WiKi】
  6. BigDecimal的使用和一些坑
  7. Java接口幂等性多种解决方案
  8. 做软件“产品”开发需要哪些文档?
  9. android contentprovider原理,ContentProvider原理分析
  10. vs2010设置堆栈大小