安装

使用PyCharm安装,进入到PyCharm -> Preferences -> Project Interpreter,点击加号

查询框输入‘Scrapy’,点击‘Install Package’

使用shell调试工具

  1. 使用Scrapy提供的shell调试工具来抓取网页信息, 以爬取我的博客为例,如下
MAC-53796:PycharmProjects gcui$ scrapy shell https://blog.csdn.net/galen2016
...
...
...
[s] Available Scrapy objects:
[s]   scrapy     scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s]   crawler    <scrapy.crawler.Crawler object at 0x10672f050>
[s]   item       {}
[s]   request    <GET https://blog.csdn.net/galen2016>
[s]   response   <200 https://blog.csdn.net/galen2016>
[s]   settings   <scrapy.settings.Settings object at 0x106817090>
[s]   spider     <DefaultSpider 'default' at 0x106bab490>
[s] Useful shortcuts:
[s]   fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s]   fetch(req)                  Fetch a scrapy.Request and update local objects
[s]   shelp()           Shell help (print this help)
[s]   view(response)    View response in a browser
>>>

可以看到返回200,说明抓取网页信息成功了。
注意,如果返回403,可能是网页开启了“防爬虫’,可以让Scrapy伪装成浏览器来解决,即在发送请求时添加User-Agent头,将User-Agent的值设置为浏览器发送请求的User-Agent。可以在浏览器的开发者模式中查到User-Agent。
例如,可以使用如下命令让Scrapy伪装成Chrome浏览器来开启shell调试

scrapy shell -s USER_AGENT='Mozilla/5.0' https://blog.csdn.net/galen2016
  1. 在Scrapy的shell控制台调用response的xpath()方法来获取Xpath匹配的节点,如获取博客的标题:
>>> response.xpath('//article//h4/text()').extract()
['PyCharm上传本地项目到GitLab - MacOS版', '【Docker】Docker运行Web UI自动化Demo', '[Mac] selenium打开Chrome浏览器', 'Python-常用的正则表达式', 'Docker - Dockerfile指令', '【Docker】docker容器管理总结', 'Postman/Newman+Docker+Jenkins/Pipeline 做接口自动化测试', 'Docker运行Postman/Newman', 'Docker -删除镜像(image)', '【Pytest】fixture使用request传参,结合parametrize', '【Pytest】使用Allure测试报告', '域名系统DNS 总结', 'Python - 日期、时间和日历操作', 'Python -日志模块使用', '动态主机配置协议DHCP', '2019年总结  - 收获很多', 'MacBook 复制文件和文件夹路径', '【Appium】Android Toast捕获', '【Appium】使用uiautomator定位元素', 'xpath不等于、不包含的写法']
>>>

创建Scrapy项目

  1. 选择一个目录,在命令行输入:scrapy startproject xxxx,最后一个参数是项目名,如下
MAC-53796:PycharmProjects gcui$ scrapy startproject BlogSpider
New Scrapy project 'BlogSpider', using template directory '/usr/local/lib/python3.7/site-packages/scrapy/templates/project', created in:/Users/gcui/PycharmProjects/BlogSpiderYou can start your first spider with:cd BlogSpiderscrapy genspider example example.com
MAC-53796:PycharmProjects gcui$
  1. 用PyCharm打开该项目,可以看到项目的目录如下:

    scrapy.cfg: 项目的总配置文件,通常无需修改
    BlogSpider/items.py: 用于定义项目用到的Item类,也就是一个数据传输对象,需要由开发者来定义
    BlogSpider/pipelines.py: 项目的管道文件,负责处理爬取到的信息,需要由开发者来编写
    BlogSpider/setting.py: 项目的配置文件
    BlogSpider/spiders: 在该目录下存放项目所需的蜘蛛–负责抓取项目感兴趣的信息。

Scrapy开发步骤

  1. 定义Item类,定义被爬取对象的属性,如果博客标题、发布时间、阅读量等,在item.py中定义,如下:
import scrapyclass BlogspiderItem(scrapy.Item):# 博客标题title = scrapy.Field()# 发布时间publish_date = scrapy.Field()# 阅读量read_count = scrapy.Field()
  1. 编写Spider类,将该Spider类文件放在spiders目录下,然后用XPath或CSS来提取HTML页面中感兴趣的信息。
    Scrap提供了scrapy genspider命令,可以直接生成Spider类。先进入到BlogSpider目录下,然后运行:
MAC-53796:BlogSpider gcui$ scrapy genspider galen__blogs 'blog.csdn.net/'
Created spider 'galen__blogs' using template 'basic' in module:BlogSpider.spiders.galen__blogs
MAC-53796:BlogSpider gcui$

以上命令在BlogSpider/spiders目录下生成了galen_blogs.py, 如下图:

重写Spider类,主要是将要爬取的各页面URL定在start_url列表中,然后在parse方法中通过XPath或CSS提取感兴趣的信息,如下:

import scrapy
from BlogSpider.items import BlogspiderItemclass GalenBlogsSpider(scrapy.Spider):# 定义该Spider的名字name = 'galen__blogs'# 定义该Spider允许爬取的域名allowed_domains = ['blog.csdn.net/']# 定义该Spider爬取的首页列表start_urls = ['https://blog.csdn.net/galen2016']# 该方法负责提取response所包含的信息# response 代表下载器从start_urls中的每个URL下载得到的响应def parse(self, response):# 遍历页面中的所有 //article[@class="blog-list-box"] 节点for article in response.xpath('//article[@class="blog-list-box"]'):item = BlogspiderItem()item['title'] = article.xpath('.//h4/text()').extract_first()item['publish_date'] = article.xpath('.//div[@class="view-time-box"]/text()').extract_first()item['read_count'] = article.xpath('.//span[@class="view-num"]/text()').extract_first()yield item

最后一行代码使用yield语句将item对象返回给Scrapy引擎,然后Scrapy引擎将这些item收集起来传给项目的Pipeline。
3. 编写pipelines.py文件,目前只是简单的在控制台打印item数据,没有使用数据库。如下:

class BlogspiderPipeline:def process_item(self, item, spider):print('博客标题:', item['title'])print('发布时间:', item['publish_date'])print('阅读量:', item['read_count'])

Scrapy引擎会自动将Spider捕获的所有item逐个传给process_item(self, item, spider)方法,因此该方法只需处理单个的item即可。
4. 修改settings.py文件,将如下行取消注释

ITEM_PIPELINES = {'BlogSpider.pipelines.BlogspiderPipeline': 300,
}
  1. 启动Spider,命令行进入到项目根目录下,输入如下命令:
MAC-53796:BlogSpider gcui$ scrapy crawl galen__blogs

最后一个参数 galen_blogs就是前面定义的Spider名称。运行上面命令之后,可以获取如下结果:

【Python】使用Scrapy 网络爬虫框架Demo相关推荐

  1. 快速认识网络爬虫与Scrapy网络爬虫框架

    本课程为之后Scrapy课程的预先课程,非常简单,主要是为了完全没有基础的小白准备的,如果你已经有了一定的了解那么请跳过该部分 问:什么是网络爬虫 答:就是从网上下载数据的一个程序,只不过这个程序下载 ...

  2. scrapy 中爬取时被重定向_一篇文章教会你理解Scrapy网络爬虫框架的工作原理和数据采集过程...

    今天小编给大家详细的讲解一下Scrapy爬虫框架,希望对大家的学习有帮助. 1.Scrapy爬虫框架 Scrapy是一个使用Python编程语言编写的爬虫框架,任何人都可以根据自己的需求进行修改,并且 ...

  3. Scrapy网络爬虫框架实际案例讲解,Python爬虫原来如此简单!

    创建项目 Scrapy爬虫框架提供一个工具来创建项目,生成的项目中预置了一些文件,用户需要在这些文件中添加python代码.最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你 ...

  4. Scrapy网络爬虫框架实战[以腾讯新闻网为例]

    本博客为原创博客,仅供技术学习使用.不经允许禁止复制下来,传到百度文库等平台. 目录 引言 待爬的url 框架架构 items的编写 Spider的编写 存储pipelines的编写 相关配置sett ...

  5. Python网络爬虫框架 Scrapy简介

    Scrapy 网络爬虫框架 Scrapy的安装 cmd 执行: pip install scrapy测试安装: scrapy -h Scrapy介绍 Scrapy不是一个函数功能库,而是一个爬虫框架. ...

  6. 网络爬虫框架Scrapy简介

    作者: 黄进(QQ:7149101) 一. 网络爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本:它是一个自动提取网页的程序,它为搜索引擎从万维 ...

  7. A 3. 笔记 - 精通scrapy网络爬虫 - 刘硕(18年7月)

    第1章 初识scrapy 1.1 创建第一个项目 项目描述: 抓取电商网站上的图书名称和价格 地址:http://books.toscrape.com/catalogue/page-1.html 流程 ...

  8. 开源 Python网络爬虫框架 Scrapy

    开源 Python 网络爬虫框架 Scrapy:http://blog.csdn.net/zbyufei/article/details/7554322 介绍 所谓网络爬虫,就是一个在网上到处或定向抓 ...

  9. 【Python学习系列五】Python网络爬虫框架Scrapy环境搭建

    1.网络爬虫库Scrapy 网络爬虫,是在网上进行数据抓取的程序,使用它能够抓取特定网页的HTML数据.Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便.Scrap ...

最新文章

  1. 【代码段】UIView 部分圆角
  2. onnx模型部署(一) ONNXRuntime
  3. 用python语言调试程序你用的平台是_Python 程序如何高效地调试?
  4. linux超实用的管理命令
  5. 书生云王东临:真正的超融合产品要像“机器猫” 开箱即用
  6. 转行python能拿到多少钱_想转行学python过来人提醒大家几点
  7. JAVA jdk安装
  8. 计算机辅助翻译与人工翻译论文,计算机辅助翻译:理念和工具[翻译研究新探论文献文集].pdf...
  9. 中煤 php面试,中煤总部笔试面试经验
  10. 设置无效,为什么下载分数经常变化?
  11. nero 刻录一张4g的服务器系统盘大概需要多长时间,刻录系统盘(如何刻录系统盘) 狸窝用户有福了:nero刻录系统盘...
  12. 预定义 宏 #define 详解
  13. Linux -- 如何修改 Linux 虚拟机 SNMP 的团体名
  14. 软件测试周刊(第36期):为什么你要当程序员?
  15. Linux 发展历程
  16. 盛世昊通董车长APP新功能上线,看视频获收益
  17. 显示器是微型计算机必须配置的一,高职单招计算机基础练习题
  18. 字节跳动暑期实习生一面面经 大三
  19. 空间变换网络(Spatial Transform Networks,STN)
  20. 建筑工程规划电子报规

热门文章

  1. 罗德里格斯公式及其推导
  2. 滤波、信号、数字与模拟、金字塔不懂才怪教程
  3. win7,如何把文件夹和文件,视图改成平铺,默认是列表
  4. 配置Windows(Win7)导航面板(Navigation Pane)隐藏/显示收藏夹、库、网络等
  5. 名人励志故事:比起点更重要的是梦想
  6. EasyExcel太简单易用了,强烈推荐!
  7. Http- Post/Get请求参数值最大限制问题
  8. ios 代码裁剪图片
  9. 闪耀暖暖总是显示服务器连接失败,《闪耀暖暖》服务器连接失败怎么办 当前无网络链接怎么办...
  10. 流量卡实物商城系统源码