- Scrapy是一个开源协作的框架,其目的是为了页面抓取,使用它可以快速、简单、可扩展的从网站中提取所需要的数据
- 用途十分广泛,可用于数据挖掘、监测和自动化测试等领域,使用的时候十分方便,并通过异步来实现并发
引擎:Hi,Spider,你要处理哪一个网站?
Spider:老大,我要处理xxx.com
引擎:你把第一个需要处理的URL给我吧
Spider:老大,第一个URL是xxx.com
引擎:Hi,调度器,我这有request请求你帮我排序入队一下
调度器:好的正在处理,你等一下
引擎:Hi,调度器,把你处理好的request请求给我
调度器:给你,这是我处理好的request
引擎:Hi,下载器,你按照下载中间件的设置帮我下载一下这个request请求
下载器:好的,给你(如果失败,sorry,这个request下载失败了,然后引擎告诉调度器,这个request下载失败了,你记录一下,我们待会下载)
引擎:Hi spider,这是下载好的东西,并且已经按照老大的下载中间件处理过了,(注意!这儿responses是默认交给def parse()这个函数处理)
Spider:(处理完毕数据之后对于需要跟进的URL)HI,引擎,我这里有两个结果,这个是我需要跟进的URL,这个是我获取的Item数据
引擎:HI,管道,我这儿有个Item你帮我处理一下!调度器!这是需要跟进的Url,你帮我处理一下,然后从第四部开始循环,知道获取老大需要的全部信息。
管道,调度器:好的,现在就做!
注意:只有调度器中没有url时,程序才会停止
1.pip install pywin32
2.pip install twisted
3.pip install scrapy
1.apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
2.pip install scrapy
在自己的环境下输入scrapy,看看是否出现版本名,有则就安装成功
- 创建一个scrapy项目
- 定义要提取的结构化数据(Item)
- 编写爬取网站的spider并提取结构化的数据(Item)
-
编写Item Pipline来存储提取到的结构化数据
-
开始爬去之前,必须创建一个新的Scrapy项目,进入自定义的项目目录中,并实行以下命令
scrapy startproject 爬虫名字
scrapy.cfg:项目的配置文件
easecloud/:项目的python模块,
easecloud/items.py:项目的目标文件
easecloud/pipelines.py:项目的管道文件
easecloud/settings.py:项目的配置文件
easecloud/easecloud/:项目涉及的代码
打算抓取豆瓣top250里面所有的标题和简介
class DoubanItem(scrapy.Item):
title = scrapy.Field()
indroduce = scrapy.Field()
pass
:在easecloud下面加上,会生成一个douban.py的文件
spider genspider douban douban.com
出现了
import scrapy
class DoubanSpider(scrapy.Spider):
name = 'douban'
allowed_domains = ['douban.com']
start_urls = ['http://douban.com/']
def parse(self, response):
pass
爬取之前做的小修改,在settings文件里面需要全部大写,否则不会生效
USER_AGENT = 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'
LOG_LEVEL = 'WARNING'
ROBOTSTXT_OBEY = True
def parse(self, response):
with open('movie.html','w',encoding='utf-8')as f:
f.write(response.text)
运行命令:scrapy crwal 爬虫名
douban.py文件的修改
import scrapy
from ..items import DoubanItem
class DoubanSpider(scrapy.Spider):
name = 'douban'
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
info = response.xpath('//div[@class="info"]')
for div in info:
title = div.xpath("./div[1]/a/span[1]/text()").extract_first()
introduce = div.xpath("./div[2]/p[1]/text()").extract()
print(title,introduce)
break
"""
肖申克的救赎 ['\n 导演: 弗兰克·德拉邦特 Frank Darabont\xa0\xa0\xa0主演: 蒂姆·罗宾斯 Ti
m Robbins /...', '\n 1994\xa0/\xa0美国\xa0/\xa0犯罪 剧情\n ']
"""
用xpath得到的是一个selector对象,要想提取出其中的值,就要用到extract()方法,将数据会保存到列表里去的
import scrapy
from ..items import DoubanItem
class DoubanSpider(scrapy.Spider):
name = 'douban'
start_urls = ['https://movie.douban.com/top250']
def parse(self, response):
items = []
item = {}
info = response.xpath('//div[@class="info"]')
for div in info:
title = div.xpath("./div[1]/a/span[1]/text()").extract_first()
introduce = div.xpath("./div[2]/p[1]/text()").extract()
introduce = ''.join(j.strip() for j in [i.replace("\\xa0",'') for i in introduce])
item['title'] = title
item['introduce'] = introduce[0]
items.append(item)
break
return items
scrapy保存数据的简单方式主要有四种,-o 是输出格式,itcast是你的爬虫名
scrapy crawl itcast -o movie.json
scrapy crawl itcast -o movie.jsonl
scrapy crawl itcast -o movie.csv
scrapy crawl itcast -o movie.xml
本次爬虫只是最基础的,没有用到pipeline以及调度器来处理数据,读者可先进行了解,后续会进行相关笔记的编写
Original: https://blog.csdn.net/Indra_ran/article/details/123644911
Author: Indra_ran
Title: 爬虫的高阶使用——scrapy框架
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/790892/
转载文章受原作者版权保护。转载请注明原作者出处!