说明:

  本文主要学习Scrapy框架入门,介绍如何使用Scrapy框架爬取页面信息。

  项目案例:爬取腾讯招聘页面 https://hr.tencent.com/position.php?&start=

  开发环境:win10、Python3.5、Scrapy1.5

一、安装

  》pip install scrapy

  //如果安装不成功,可以参考 https://blog.csdn.net/dapenghehe/article/details/51548079

  //或下载安装twisted

二、创建项目(scrapy startproject)

  1、在开始爬取之前,必须创建一个新的Scrapy项目。进入相应目录,运行下列命令(tencent为项目名称):

    》scrapy startproject tencentSpider

  

  2、进入项目目录(tencentSpider)

    项目目录结构如下:

    

    

    scrapy.cfg:项目的配置文件。

    tencentSpider/:项目的Python模块,将会从这里引用代码。

    tencentSpider/spiders/:存储爬虫代码目录(爬虫文件主要在此编辑)。

    tencentSpider/items.py:项目的目标文件。

    tencentSpider/middlewares.py:项目中间件。

    tencentSpider/pipelines.py:项目管道文件。

    tencentSpider/setting:项目的设置文件。

    

  到此,项目基本创建完成,接下来就是编写爬虫代码了。

三、明确目标(tencentSpider/items.py)

  明确需要爬取的网址以及需要的信息,在 items.py 中定义需要爬取的信息字段。

  本项目主要爬取:https://hr.tencent.com/position.php?&start= 网站里的职称、详情地址、类别、人数、地点和发布时间。

  1、打开 tencentSpider 目录下的 items.py。

  2、Item 定义结构化数据字段,用来保存爬取到的数据,类似于Python的字典,但是提供一些额外的的保护减少错误。

  3、可以通过创建一个 scrapy.Item 类,并且定义类型为 scrapy.Field 的类属性来定义一个Item(可以理解成类似于ORM的映射关系)。

  4、接下来,创建一个 TencentspiderItem 类,和构建item模型(model)。

  

  items.py代码如下:

 1 # -*- coding: utf-8 -*-
2
3 # Define here the models for your scraped items
4 #
5 # See documentation in:
6 # https://doc.scrapy.org/en/latest/topics/items.html
7
8 import scrapy
9
10
11 class TencentspiderItem(scrapy.Item):
12 # define the fields for your item here like:
13 # name = scrapy.Field()
14
15 # 职称
16 title = scrapy.Field()
17 # 详情地址
18 link = scrapy.Field()
19 # 类别
20 cate = scrapy.Field()
21 # 人数
22 num = scrapy.Field()
23 # 地点
24 address = scrapy.Field()
25 # 发布时间
26 date = scrapy.Field()

四、制作爬虫(spiders/tencentSpider.py)

  1、爬取数据

    ① 在 与 scrapy.cfg 同级目录下执行如下命令,将会在 tencentSpider/spiders 目录下创建一个名为 tencent 的爬虫,并制定爬取的域范围(或手动创建文件,基本代码格式如下所示):

      》scrapy genspider tencent "hr.tencent.com"

    ② 打开 tencentSpider/spiders 目录下的 tencent.py ,默认的代码如下:

 1 # -*- coding: utf-8 -*-
2 import scrapy
3
4
5 class TencentSpider(scrapy.Spider):
6 name = 'tencent'
7 allowed_domains = ['hr.tencent.com']
8 start_urls = ['http://hr.tencent.com/']
9
10 def parse(self, response):
11 pass

      

    ③ 编写爬虫文件,基本思路:构造分页url,解析内容(xpath),管道文件处理:

 1 # -*- coding: utf-8 -*-
2 import scrapy
3 from tencentSpider.items import TencentspiderItem
4
5
6 class TencentSpider(scrapy.Spider):
7 # 爬虫的名字
8 name = 'tencent'
9 allowed_domains = ["hr.tencent.com"]
10
11 # 拼接 URL
12 url = "https://hr.tencent.com/position.php?&start="
13 offset = 0
14
15 # 首次爬取入口URL
16 start_urls = [url + str(offset)]
17
18 def parse(self, response):
19 info_ls = response.xpath('//tr[contains(@class, "odd")] | //tr[contains(@class, "even")]')
20
21 # 原始地址
22 origin_url = "https://hr.tencent.com/"
23
24 for each in info_ls:
25 # 初始化模型对象
26 item = TencentspiderItem()
27
28 # 职称
29 title = each.xpath("./td/a/text()")[0].extract()
30 # 详情地址
31 link = origin_url + each.xpath("./td/a/@href")[0].extract()
32 # 职位分类
33 cate = each.xpath('./td[2]/text()')[0].extract()
34 # 人数
35 num = each.xpath('./td[3]/text()')[0].extract()
36 # 所在地址
37 address = each.xpath('./td[4]/text()')[0].extract()
38 # 发布时间
39 date = each.xpath('./td[5]/text()')[0].extract()
40
41 item['title'] = title
42 item['link'] = link
43 item['cate'] = cate
44 item['num'] = num
45 item['address'] = address
46 item['date'] = date
47
48 # 交给管道 pipelines 处理
49 yield item
50
51 # 循环遍历分页,这里只爬取 100 条
52 if self.offset < 100:
53 self.offset += 10
54
55 # 每次处理完一页的数据之后, 重新发送下一页的页面请求
56 yield scrapy.Request(self.url + str(self.offset), callback=self.parse)
57 else:
58 print("[ALL_END:爬虫结束]")

    

    ④ 修改配置文件(settings.py),部分:

      需要修改的主要有如下三处: 

 1 # 是否遵守 robot 协议,本项目为False
2 ROBOTSTXT_OBEY = False
3
4
5 # 请求头
6 DEFAULT_REQUEST_HEADERS = {
7 'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Window NT 6.1; Trident/5.0;)',
8 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
9 # 'Accept-Language': 'en',
10 }
11
12 # 配置管道文件
13 ITEM_PIPELINES = {
14 'tencentSpider.pipelines.TencentspiderPipeline': 300,
15 }

           

    ⑤ 编写管道文件 pipelines.py:

      这里的管道文件主要把数据以json格式保存在文件中:

 1 # -*- coding: utf-8 -*-
2
3 # Define your item pipelines here
4 #
5 # Don't forget to add your pipeline to the ITEM_PIPELINES setting
6 # See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
7 import json
8
9 class TencentspiderPipeline(object):
10 def __init__(self):
11 self.save_path = open("res_info.json", "w", encoding="utf8")
12 self.save_path.write("[")
13
14 def process_item(self, item, spider):
15 # 处理每页的数据,并写入文件
16 json_text = json.dumps(dict(item), ensure_ascii=False) + ", \n"
17 self.save_path.write(json_text)
18
19 return item
20
21 def close_spider(self, spider):
22 self.save_path.write("{}]")
23 self.save_path.close()

    

    ⑥ 运行爬虫:

      》scrapy crawl tencent

    ⑦ 查看结果,打开数据文件 res_info.json:

    

   

 

 

【python】Scrapy爬虫框架入门的更多相关文章

  1. [Python] Scrapy爬虫框架入门

    说明: 本文主要学习Scrapy框架入门,介绍如何使用Scrapy框架爬取页面信息. 项目案例:爬取腾讯招聘页面 https://hr.tencent.com/position.php?&st ...

  2. Python之Scrapy爬虫框架 入门实例(一)

    一.开发环境 1.安装 scrapy 2.安装 python2.7 3.安装编辑器 PyCharm 二.创建scrapy项目pachong 1.在命令行输入命令:scrapy startproject ...

  3. Scrapy 爬虫框架入门案例详解

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...

  4. Python Scrapy 爬虫框架实例(一)

    之前有介绍 scrapy 的相关知识,但是没有介绍相关实例,在这里做个小例,供大家参考学习. 注:后续不强调python 版本,默认即为python3.x. 爬取目标 这里简单找一个图片网站,获取图片 ...

  5. Python Scrapy 爬虫框架实例

    之前有介绍 scrapy 的相关知识,但是没有介绍相关实例,在这里做个小例,供大家参考学习. 注:后续不强调python 版本,默认即为python3.x. 爬取目标 这里简单找一个图片网站,获取图片 ...

  6. scrapy爬虫框架入门实例(一)

    流程分析 抓取内容(百度贴吧:网络爬虫吧) 页面: http://tieba.baidu.com/f?kw=%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB&ie=ut ...

  7. scrapy爬虫框架入门教程

    scrapy安装请参考:安装指南. 我们将使用开放目录项目(dmoz)作为抓取的例子. 这篇入门教程将引导你完成如下任务: 创建一个新的Scrapy项目 定义提取的Item 写一个Spider用来爬行 ...

  8. python scrapy爬虫框架概念介绍(个人理解总结为一张图)

    python的scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架   python和scrapy的安装就不介绍了,资料很多 这里我个人总结一下,能更加快理解scrapy和快速上手一个简 ...

  9. python - scrapy 爬虫框架(创建, 持久化, 去重, 深度, cookie)

    ## scrapy 依赖 twisted  - twisted 是一个基于事件循环的 异步非阻塞 框架/模块 ##  项目的创建  1. 创建 project scrapy startproject ...

随机推荐

  1. Smart3d 近景摄影测量与航空摄影测量

    实例:http://blog.sina.com.cn/s/blog_8f68d2350102wef4.html ContextCapture(Smart3d):https://www.bentley. ...

  2. 深入理解java虚拟机(八)类加载过程详解

    类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading).验证(Verification).准备(Preparation).解析(Resolution).初始化(In ...

  3. UML的常用关系及其符号表示

    原创 UML的常用关系及其符号表示 一.实现关系 通常是一个类实现一个接口 符号表示: 二.泛化关系 通常是一个类继承另外一个类 符号表示: 三.依赖关系 通常是一个类里面的方法的参数类型是另一个类 ...

  4. [Windows] IIS6 部署ISAPI

    环境: OS:Windows Server 2003  Enterprise sp2 34位 IIS:6.0 ISAPI: delphi xe 编译的webbroker isapi dll 32位 ( ...

  5. C#中使用Redis学习二 在.NET4.5中使用redis hash操作

    上一篇>> 摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表. ...

  6. 曲苑杂坛--查看CPU配置

    ​--===================================================--查看CPU配置SELECT cpu_count AS [Logical CPU Coun ...

  7. IIS 发布webservice 需要用户名和密码访问 解决

    今天,我在IIS上发布了一个自己写的webservice,然后我在远程通过浏览器来访问这个webservice的时候出现一个登录界面如下  之前我朋友发布webservice的时候也出现过一次,那次好 ...

  8. DI 依赖注入之StructureMap框架

    DI  依赖注入之StructureMap框架 一.简叙: structureMap只是DI框架中的其中之一. 二.安装及使用: 1.懒人方法: 使用MVC5项目时,可以直接在nuget程序包中安装S ...

  9. Perl+OpenGL 重绘inkscape生成的svg矢量图

    Perl+OpenGL 重绘inkscape生成的svg矢量图 还不够完善,先挖个坑,后面慢慢填 Code: [全选] [展开/收缩] [Download] (Untitled.pl) =info A ...

  10. oppo手机永久打开USB调试模式

    现象:十分钟不使用就会自动关闭 usb 调试模式,重新打开还得输入验证码,真尼玛烦人. 方法: 数字拨号盘 输入 *#8011#  就可以永久打开.