wordpress建站不懂程序,全国平面设计大赛官网,云南网络公司排名,wordpress google 360插件入门案例
学习目标
创建一个Scrapy项目定义提取的结构化数据(Item)编写爬取网站的 Spider 并提取出结构化数据(Item)编写 Item Pipelines 来存储提取到的Item(即结构化数据)
一. 新建项目(scrapy startproject)
在开始爬取之前#xff0c;必须创建一个新的Scrapy项目。进入…入门案例
学习目标
创建一个Scrapy项目定义提取的结构化数据(Item)编写爬取网站的 Spider 并提取出结构化数据(Item)编写 Item Pipelines 来存储提取到的Item(即结构化数据)
一. 新建项目(scrapy startproject)
在开始爬取之前必须创建一个新的Scrapy项目。进入自定义的项目目录中运行下列命令
scrapy startproject mySpider其中 mySpider 为项目名称可以看到将会创建一个 mySpider 文件夹目录结构大致如下下面来简单介绍一下各个主要文件的作用 scrapy.cfg 项目的配置文件 mySpider/ 项目的Python模块将会从这里引用代码 mySpider/items.py 项目的目标文件 mySpider/pipelines.py 项目的管道文件 mySpider/settings.py 项目的设置文件 mySpider/spiders/ 存储爬虫代码目录 二、明确目标(mySpider/items.py)
我们打算抓取http://www.itcast.cn/channel/teacher.shtml 网站里的所有讲师的姓名、职称和个人信息。 打开mySpider目录下的items.py Item 定义结构化数据字段用来保存爬取到的数据有点像Python中的dict但是提供了一些额外的保护减少错误。 可以通过创建一个 scrapy.Item 类 并且定义类型为 scrapy.Field的类属性来定义一个Item。 接下来创建一个ItcastItem 类和构建item模型model。
import scrapyclass ItcastItem(scrapy.Item):name scrapy.Field()level scrapy.Field()info scrapy.Field()三、制作爬虫 spiders/itcastSpider.py
爬虫功能要分两步
1. 爬数据
在当前目录下输入命令将在mySpider/spider目录下创建一个名为itcast的爬虫并指定爬取域的范围
scrapy genspider itcast itcast.cn打开 mySpider/spider目录里的 itcast.py默认增加了下列代码:
import scrapyclass ItcastSpider(scrapy.Spider):name itcastallowed_domains [itcast.cn]start_urls (http://www.itcast.cn/,)def parse(self, response):pass其实也可以由我们自行创建itcast.py并编写上面的代码只不过使用命令可以免去编写固定代码的麻烦
要建立一个Spider 你必须用scrapy.Spider类创建一个子类并确定了三个强制的属性 和 一个方法。 name 这个爬虫的识别名称必须是唯一的在不同的爬虫必须定义不同的名字。 allow_domains [] 是搜索的域名范围也就是爬虫的约束区域规定爬虫只爬取这个域名下的网页不存在的URL会被忽略。 start_urls () 爬取的URL元祖/列表。爬虫从这里开始抓取数据所以第一次下载的数据将会从这些urls开始。其他子URL将会从这些起始URL中继承性生成。 parse(self, response) 解析的方法每个初始URL完成下载后将被调用调用的时候传入从每一个URL传回的Response对象来作为唯一参数主要作用如下 负责解析返回的网页数据(response.body)提取结构化数据(生成item)生成需要下一页的URL请求。
将start_urls的值修改为需要爬取的第一个url
start_urls (http://www.itcast.cn/channel/teacher.shtml,)修改parse()方法
def parse(self, response):with open(teacher.html, w) as f:f.write(response.text)然后运行一下看看在mySpider目录下执行
scrapy crawl itcast是的就是 itcast看上面代码它是 ItcastSpider 类的 name 属性也就是使用 scrapy genspider命令的爬虫名。
一个Scrapy爬虫项目里可以存在多个爬虫。各个爬虫在执行时就是按照 name 属性来区分。
运行之后如果打印的日志出现 [scrapy] INFO: Spider closed (finished)代表执行完成。 之后当前文件夹中就出现了一个 teacher.html 文件里面就是我们刚刚要爬取的网页的全部源代码信息。 2. 取数据
爬取整个网页完毕接下来的就是的取过程了首先观察页面源码div classli_txth3 xxx /h3h4 xxxxx /h4p xxxxxxxx /p是不是一目了然直接上XPath开始提取数据吧。
我们之前在mySpider/items.py 里定义了一个ItcastItem类。 这里引入进来from mySpider.items import ItcastItem然后将我们得到的数据封装到一个 ItcastItem 对象中可以保存每个老师的属性
from mySpider.items import ItcastItemdef parse(self, response):#open(teacher.html,wb).write(response.body).close()# 存放老师信息的集合items []for each in response.xpath(//div[classli_txt]):# 将我们得到的数据封装到一个 ItcastItem 对象item ItcastItem()#extract()方法返回的都是字符串name each.xpath(h3/text()).extract()title each.xpath(h4/text()).extract()info each.xpath(p/text()).extract()#xpath返回的是包含一个元素的列表item[name] name[0]item[title] title[0]item[info] info[0]items.append(item)# 直接返回最后数据return items我们暂时先不处理管道后面会详细介绍。
保存数据
scrapy保存信息的最简单的方法主要有四种-o 输出指定格式的文件命令如下
# json格式默认为Unicode编码
scrapy crawl itcast -o teachers.json# json lines格式默认为Unicode编码
scrapy crawl itcast -o teachers.jsonl# csv 逗号表达式可用Excel打开
scrapy crawl itcast -o teachers.csv# xml格式
scrapy crawl itcast -o teachers.xml