爬虫课程笔记
Scrapy
为什么学习scrapy?
Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架,我们只需要实现少量的代码,就能够快速的抓取
Scrapy 使用了Twisted['twɪstɪd]异步网络框架,可以加快我们的下载速度。
http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
异步与非阻塞区别
异步:调用在发出之后,这个调用就直接返回,不管有无结果
非阻塞:关注的是程序在等待调用结果(消息,返回值)时的状态,指在不能立刻得到结果之前,该调用不会阻塞当前线程。
爬虫流程
scrapy爬虫流程
入门
创建一个scrapy项目
scrapy startproject mySpider
命令:
scrapy startproject +<项目名字>
scrapy startproject myspider
生成一个爬虫
scrapy genspider baidu "baidu.com”
命令:scrapy genspider +<爬虫名字> + <允许爬取的域名>
scrapy genspider itcast “itcast.cn”
提取数据
完善spider,使用xpath等方法
保存数据
pipeline中保存数据
去掉注释开启pipeline
spider的数据传到pipeline
demo
# -*- coding: utf-8 -*-
import scrapy
class ItcastSpider(scrapy.Spider):
name = 'itcast' #爬虫名
allowed_domains = ['itcast.cn'] #允许爬取的范围
start_urls = ['http://www.itcast.cn/channel/teacher.shtml'] #最开始请求的url地址
def parse(self, response):
#处理start_url地址对应的响应
# ret1 = response.xpath("//div[@class='tea_con']//h30/text()").extract()
# print(ret1)
#分组
li_list = response.xpath("//div[@class='tea_con']//li")
for li in li_list:
item = {
}
item["name"]=li.xpath(".//h3/text()").extract_first()
item["title"] = li.xpath(".//h4/text()").extract_first()
# print(item)
#Request, BaseItem, dict or None
yield item
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
class MyspiderPipeline(object):
def process_item(self, item, spider):
#TODO
item["hello"] = "world"
# print(item)
return item
class MyspiderPipeline1(object):
def process_item(self, item