爬虫 - Scrapy框架安装使用1
网络爬虫是指在互联网上自动爬取网站内容信息的程序,也被称作网络蜘蛛或网络机器人。大型的爬虫程序被广泛应用于搜索引擎、数据挖掘等领域,个人用户或企业也可以利用爬虫收集对自身有价值的数据。
简单流程如图所示:
-
下载页面
一个网页的内容本质上就是一个HTML文本,爬取一个网页内容之前,首先要根据网页的URL下载网页 -
提取页面中的数据
当一个网页(HTML)下载完成后,对页面中的内容进行分析,并提取出我们感兴趣的数据,提取到的数据可以以多种形式保存起来,比如将数据以某种格式(CSV、JSON)写入文件中,或存储到数据库(MySQL、MongoDB)中。 -
提取页面中的链接
通常,我们想要获取的数据并不只在一个页面中,而是分布在多个页面中,这些页面彼此联系,一个页面中可能包含一个或多个到其他页面的链接,提取完当前页面中的数据后,还要把页面中的某些链接也提取出来,然后对链接页面进行爬取(循环1-3步骤)
安装Scrapy框架
1. 安装wheel
pip install wheel
2. 安装lxml
pip install lxml
3. 安装pyopenssl
pip install pyopenssl
4. 下载并安装pywin32
pip install pywin32
5. 下载twisted的wheel文件
下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted
6. 安装wheel文件
pip install D:\Twisted-20.3.0-cp37-cp37m-win32.whl
pip install Twisted --default-timeout=100000 ###直接下载
7. 安装scrapy
pip install scrapy
创建
1. 创建项目
scrapy startproject xiangmuming
scrapy startproject xiangmuming [directory] ###指定目录创建项目
2. 创建爬虫
scrapy genspider firstspider www.cnblogs.com
3. 运行爬虫
scrapy crawl baidu #不带日志运行
scrapy crawl baidu --nolog #带日志运行
4. 创建main.py文件运行爬虫
from scrapy.cmdline import execute
execute(['scrapy','crawl','chouti','--nolog'])
配置
settings配置
1、 是否遵循爬虫协议(否)
ROBOTSTXT_OBEY = False
2、 配置user_agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
3、 配置日志等级
LOG_LEVEL='ERROR'
配置main.py运行爬虫
from scrapy.cmdline import execute
execute(['scrapy','crawl','chouti','--nolog'])
写爬虫
终端运行命令生成爬虫及爬虫文件
scrapy genspider firstspider www.cnblogs.com
1、 firstspider:爬虫名字,项目中唯一
2、 www.cnblogs.com:要爬取的网站
import scrapy
class FirstspiderSpider(scrapy.Spider):
#每一个爬虫的唯一标识,一个项目中不能有同名
name = "firstspider"
#定义爬虫的起始点,这里只有一个
allowed_domains = ["www.cnblogs.com"]
start_urls = ["http://www.cnblogs.com/"]
def parse(self, response):
# 当一个页面下载完成后,Scrapy引擎会回调一个我们指定的页面解析函数(默认为parse方法)解析页面,完成如下:
# 1.提取页面中的数据(使用XPath或CSS选择器)
# 2.提取页面中的链接,并产生对链接页面的下载请求
pass
# 页面解析函数通常被实现成一个生成器函数,每一项从页面中提取的数据以及每一个对链接页面的下载请求都由yield语句提交给Scrapy引擎。
使用Item封装数据
-
Item基类:自定义数据类的基类
-
Field类:用来描述自定义数据类包含哪些字段(如name、price等)
-
自定义一个数据类,只需继承Item,并创建一系列Field对象的类属性(类似于在Django中自定义Model)即可
# items.py初始化文件如下
import scrapy
class ScrapyprojectItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
### Item支持字典接口,因此BookItem在使用上和Python字典类似
pass
使用Pipeline处理数据
-
一个Item Pipeline不需要继承特定基类,只需要实现某些特定方法,例如process_item、open_spider、close_spider。
-
一个Item Pipeline必须实现一个process_item(item, spider)方法
# pipelines.py初始化文件如下
class ScrapyprojectPipeline:
### Spider打开时(处理数据前)回调该方法,
###通常该方法用于在开始处理数据之前完成某些初始化工作,如连接数据库,打开文件等。
def open_spider(self,spider):
pass
###process_item在处理某项item时返回了一项数据(Item或字典),返回的数据会递送给下一级Item Pipeline(如果有)继续处理;
###如果在处理某项item时抛出(raise)一个DropItem异常(scrapy.exceptions.DropItem),该项item便会被抛弃,不再递送给后面的Item Pipeline继续处理,也不会导出到文件
def process_item(self, item, spider):
return item
###Spider关闭时(处理数据后)回调该方法,
###通常该方法用于在处理完所有数据之后完成某些清理工作,如关闭数据库。
def close_spider(self,spider):
pass
启用Item Pipeline
1、 ITEM_PIPELINES是一个字典,我们把想要启用的Item Pipeline添加到这个字典中,其中每一项的键是每一个Item Pipeline类的导入路径
2、 值是一个0~1000的数字,同时启用多个Item Pipeline时,Scrapy根据这些数值决定各Item Pipeline处理数据的先后次序,数值小的在前
ITEM_PIPELINES = {
"ScrapyProject.pipelines.firstPipeline": 300,
}
使用命令行操作爬虫
在进行页面分析时,除了之前使用过的Chrome开发者工具外,另一个常用的工具是scrapy shell
### 命令行操作命令:scrapy shell <URL>
scrapy shell books.toscrape.com
-
view函数
1、 view在浏览器中显示爬虫爬取的下载页面,大部分情况下和浏览器直接访问相同,但是会比直接浏览器直接访问更加准确
-
fetch函数
1、 fetch用于下载页面,请求新的URL,获得新的response和request
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性