0.声明
主要供自己以后查阅,因此略去一些不重要环节.
本系列运行环境如下:
- Scrapy : 1.6.0
- lxml : 4.2.5.0
- libxml2 : 2.9.8
- cssselect : 1.0.3
- parsel : 1.5.1
- w3lib : 1.20.0
- Twisted : 19.2.0
- Python : 3.7.1 (default, Dec 14 2018, 19:28:38) - [GCC 7.3.0]
- pyOpenSSL : 18.0.0 (OpenSSL 1.1.1a 20 Nov 2018)
- cryptography : 2.4.2
- Platform : Linux-4.19.28-1-MANJARO-x86_64-with-arch-Manjaro-Linux
不同环境下一些细节略有不同,如Python编码等,注意!
1.简介
略
2.安装
略
3.基本项目流程
- 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
- 明确目标 (编写items.py):明确你想要抓取的目标
- 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
- 存储内容 (pipelines.py):设计管道存储爬取内容
4.基本工作流程
- 创建一个Scrapy项目
- 定义提取的结构化数据(Item)
- 编写爬取网站的Spider并提取结构化数据(Item)
- 编写Item Piplines来存储提取到的Item(即结构化数据)
4.入门案例
1.创建项目
使用如下命令在当前目录下新建名为tutorial
的项目:
scrapy startproject tutorial
2.明确目标
我们打算抓取传智播客网站里的所有讲师的姓名、职称和个人信息。
如图:
我们打算先初步抓取其中各老师的名称,职称,描述三部分.
3.定义结构化数据Item
修改项目中items.py
文件内容为:
import scrapy
class ItcastItem(scrapy.Item):
name = scrapy.Field()
title = scrapy.Field()
info = scrapy.Field()
4.制作爬虫
1.初始化爬虫
在当前目录下输入以下命令,初始化一个爬虫:
scrapy genspider itcast "itcast.cn"
然后打开spiders
目录下的itcast.py
文件,可以看到scrapy为我们自动生成了如下代码:
import scrapy
class ItcastSpider(scrapy.Spider):
name = "itcast"
allowed_domains = ["itcast.cn"]
start_urls = (
'http://itcast.cn/',
)
def parse(self, response):
pass
2.设定初始url
将start_urls
的值修改为需要爬取的第一个url.
start_urls = ("http://www.itcast.cn/channel/teacher.shtml",)
3.修改parse()
方法
修改parse()
方法为:
def parse(self, response):
filename = "teacher.html"
with open(filename, 'w') as f:
f.write(response.text)
非必要流程:我们可以执行以下命令,来简单测试一下当前的效果:
scrapy crawl itcast
如果程序执行无误的话,那么结果就是在当前目录会生成一个teacher.html
文件,里面就是我们刚刚要爬取的网页的全部源代码信息。
4.取数据
然后我们可以对response对象使用xpath选择器取到我们想要的数据.
细节略,最终itcast.py
脚本的内容如下:
# -*- coding: utf-8 -*-
import scrapy
from tutorial.items import ItcastItem
class ItcastSpider(scrapy.Spider):
name = "itcast"
allowed_domains = ["itcast.cn"]
start_urls = ("http://www.itcast.cn/channel/teacher.shtml",)
def parse(self, response):
# filename = "teacher.html"
# with open(filename, 'w') as f:
# f.write(response.text)
# # 获取网站标题
# context = response.xpath('/html/head/title/text()')
# # 提取网站标题
# title = context.extract_first()
# print(title)
items = []
for each in response.xpath("//div[@class='li_txt']"):
item = ItcastItem()
name = each.xpath("h3/text()").extract()
title = each.xpath("h4/text()").extract()
info = each.xpath("p/text()").extract()
item['name'] = name[0]
item['title'] = title[0]
item['info'] = info[0]
items.append(item)
return items
5.保存数据
scrapy保存信息的最简单的方法主要有四种,-o 输出指定格式的文件,命令如下:
scrapy crawl itcast -o teachers.json
其他保存的文件类型还如jsonlines(简称jl)
,csv
,xml
等.
网友评论