文章目录
python爬虫–scrapy(再探)
scrapy项目创建
基于scrapy的全站数据爬取
—需求:爬取校花网中全部图片的名称
http://www.521609.com/meinvxiaohua/
实现方式:
-
将所有页面的ur L添加到start_ urls列表(不推荐)
-
自行手动进行请求发送(推荐)
手动请求发送:
yield scrapy. Request (url, callback) : callback专用做于数据解析
创建scrapy以及基于管道的持久化存储:请点击此处查看
import scrapy
from meinvNetwork.items import MeinvnetworkItem
class MnspiderSpider(scrapy.Spider):
name = 'mnSpider'
#allowed_domains = ['www.xxx.com']
start_urls = ['http://www.521609.com/meinvxiaohua/']
url = 'http://www.521609.com/meinvxiaohua/list12%d.html'
page_num = 2
def parse(self, response):
li_list = response.xpath('//*[@id="content"]/div[2]/div[2]/ul/li')
for li in li_list:
name = li.xpath('./a[2]/b/text() | ./a[2]/text()').extract_first()
item = MeinvnetworkItem(name=name)
yield item
if self.page_num <= 11:
new_url = format(self.url%self.page_num)
self.page_num += 1
yield scrapy.Request(url=new_url,callback=self.parse)
使用终端命令执行项目:scrapy crawl mnSpider
效果图
五大核心组件
引擎(Scrapy)
- 用来处理整个系统的数据流处理,触发事务(框架核心)
调度器(Scheduler)
- 用来接收引擎发过来的请求,压入队列中,并在引擎再次请求的时候返回。可以想象成一个URL(抓取网页的网址或者说是链接)的优先队列,由他来决定下一个要抓取的网址是什么,同时去除重复的网址。
下载器(DownLoader)
- 用于下载网页内容,并将网页内容返回给蜘蛛(Scrapy下载器是建立在twisted这个搞笑的异步模型上的)
爬虫(spiders)
- 爬虫是主要干活的,用于从特定的网页中提取自己需要的信息,即所谓的实体(Item)。用户也可以从中提取出链接,让Scrapy继续抓取下一个页面。
项目管道(Pipeline)
- 负责处理爬虫从网页中抽取的实体,主要的功能是持久化实体,验证实体的有效性、清除不需要的信息。当页面被爬虫解析后,将被发送到项目管理,并经过几个特定的持续处理数据。
请求传参
使用场景:如果爬取解析的数据不在同一张页面中。(深度爬取)
详见案例:爬取网易新闻
scrapy图片爬取
图片数据爬取(ImagesPipeline)
基于scrapy爬取字符串类型的数据和爬取图片类型的数据区别
— 字符串:只需要基于小path进行解析且提交管道进行持久化存储
— 图片:xpath解析出图片src的属性值。单独的对图片地址发起请求获取图片二进制类型的数据。
使用流程:
— 数据解析(图片地址)
— 将存储图片地址的item提交到指定的管道类
— 在管道文件中自制一个机遇ImagesPipeline的管道类
— def get_media_requests(self,item,info):#根据图片地址进行数据请求
— def file_path(self,request,response=None,info=None):#指定图片存储类型
—def item_completed(self,results,item,info):#返回给下一个即将执行的管道类
— 在配置文件中:
— 指定图片存储的目录:IMAGES_STORE = './img_temp'
— 指定开启的管道:自制定的管道类
目录层级
img.py
import scrapy
from imgsPro.items import ImgsproItem
class ImgSpider(scrapy.Spider):
name = 'img'
# allowed_domains = ['www.xxx.com']
start_urls = ['https://sc.chinaz.com/tupian/']
def