scrapy 爬虫框架

来源:互联网 发布:算法的定义和特征 编辑:程序博客网 时间:2024/06/05 16:35
1.安装 升级pip版本 pip install --upgrade pip
通过pip安装scrapy框架 pip install Scrapy

安装成功 只执行scrapy 进行测试是否安装成功

2. scrapy startproject "爬虫项目名称"
执行此命令,可以生成一个爬虫项目 
会预先生成一些文件在里面.


3.执行命令 生成爬取数据模板  scrapy genspider 文件名[类名] "要爬去的域名" [如]:scrapy genspider itcast "http://www.baidu.com"
// 命令生成的代码如下:
class ItcastSpider(scrapy.Spider):
    name = 'itcast' // 模块名称
    allowed_domains = ['http://www.itcast.cn']// 爬取的域名[可选]
    start_urls = ['http://www.itcast.cn'] // 爬取的开始路径


// 爬取后执行的代码
    def parse(self, response):
        print (response.body)// 查看相应源码
        print("end..");
// 可在这里生成下一个要爬取的链接
#这里若有个循环,则可以使用管道 yield则会进入管道
for a in "test":
            item=ScrapytestItem()
            item["title"]=a
            yield item

在window下面,按住shift 再右键,可以直接在此目录下打开命令窗口,然后执行如下命令


4.[检查爬虫状态命令]scrapy check 模块名称[这个地方要写上面那个模板里面的 name = 'itcast' 不需要写类名或者文件名称]


5.[运行一个爬虫命令] scrapy crawl 模块名称[这个地方要写上面那个模板里面的 name = 'itcast' 不需要写类名或者文件名称]

可以在命令行输入scrapy 来获取上面这些命令


6.管道 
1.在爬虫主模板下面的 parse方法里面,需要有一个循环.该循环里面需使用yield 来返回每次循环的item数据
2.item 是继承了scrapy.Item 的子类,用户存储数据,
3.管道里面可以执行处理数据的操作
4.程序执行流程  爬取到数据之后,执行主墨白里面的parse方法,通过response获取到数据,循环使用yield 返回item数据,item是经过预处理的数据存储在item里面的
再在管道里面处理这些数据[可以保存下来..等操作]
5.需要在项目里面的setting.py里面注册
ITEM_PIPELINES = {
'ScrapyTest.pipelines.ScrapytestPipeline': 300,
#来一个管道在这里添加即可 300表示优先级,数值越小越先执行
}
7 item 的 类模型

import scrapy
class ScrapytestItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
title = scrapy.Field()
#需要的字段在这里添加即可.
pass
8.管道的类
class ScrapytestPipeline(object):
#可以添加init和close [类初始和类结束]方法.来预先处理些init操作
def process_item(self, item, spider):
print("管道-------------");
   #  print(item)
   #处理item带过来的逻辑数据代码
return item


9.xpath 可通过表达式来截取网页中的数据
response.xpath("//div[@class='li_txt']")


10.scrapy shell "要爬取的网址 " 直接在项目的命令中敲此命令,可以在命令中直接爬取到对应的数据. 然后可以输入相应的命令,直接爬取数据,比如response.body 获取响应数据


11.选择器
1.xpath():传入xpath表达式,返回该表达式所对应的所有节点的list列表
XPath表达式的例子及对应的含义:
/html/head/title: 选择<HTML>文档中 <head> 标签内的 <title> 元素
/html/head/title/text(): 选择上面提到的 <title> 元素的文字
//td: 选择所有的 <td> 元素
//div[@class="mine"]: 选择所有具有 class="mine" 属性的 div 元素


2.extract(): 序列化该节点为unicode字符串并返回list
3.css():传入css表达式,返回该表达式所对应的所有节点的selector list列表,语法同beautifulSoup4
4.re():根据传入的正则表达式对数据进行提取,返回Unicode字符串list列表
原创粉丝点击