python scrapy框架详解_python scrapy框架的基本使用

虚拟环境搭建

scrapy安装

新建项目

scrapy startproject MySpider

项目结构

settings.py 文件

BOT_NAME 工程名称

SPIDER_MODULES spider存放的路径

pipelines.py

数据存储相关

items.py

定义爬取的字段

spider 文件夹

存放spider的文件

生成爬虫模板

scrapy genspider <爬虫名称> <指定域>

pycharm 设置运行环境

pycharm 断点调试

动态获取项目文件夹路径

sys.path.append(os.path.dirname(os.path.abspath(__file__)))

os.path.abspath(__file__) : 获取文件的绝对路径地址

os.path.dirname(os.path.abspath(__file__)) : 该文件所在的文件夹,也就是项目文件夹的根目录

sys.path.append(os.path.dirname(os.path.abspath(__file__))) 将项目文件夹放入到python解释器的搜索路径里

脚本文件里执行命令行命令

execute(["scrapy", "crawl", "<爬虫名>"])

setting.py文件中取消robots协议

ROBOTSTXT_OBEY = false

xpath浏览器提取工具

firebug

xpath 基础语法

// 任意位置的所有节点

/ 根节点

//@class 所有具有class的属性

p//a p下面任意位置的所有a节点

//p 任意位置所有的p节点

//a[@herf]

//a[@lang="en"]

//p[last()-1]

//p[last()]

//*

/div/a | //div/p 表示逻辑和

//span[contains(@class,"post")] 包含有其中一个css的类的节点

scrapy的xpath选择器

response.xpath() 返回的结果为 SelectList对象

链式查找

response.xpath().xpath()............

xpath /text() 提取节点里面的字符串

response.xpath("//*[@id='post']/div[1]/h1") : 包含html代码

response.xpath("//*[@id='post']/div[1]/h1/text()")

scrapy shell 调试命令

scrapy shell

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

主要作用 : 下载页面调试

正规表达式神器

AAffA0nNPuCLAAAAAElFTkSuQmCC

AAffA0nNPuCLAAAAAElFTkSuQmCC

Selector对象extract()方法

extract()提取selector对象的data属性的值

![

AAffA0nNPuCLAAAAAElFTkSuQmCC]

scrapy的css选择器

* 所有节点

#id id 节点

.class 类节点

li a 后代节点

ul + p ul后面的p

up>p ul里面的第一个p

ul ~ p ul邻居p

a[title]

a[href="baidu.com]

a[href^="http"]

a[href$=",jpg]

a[href*='baidu'] 包含baidu字符串的a节点

li:nth-child(3) 第三个li节点

tr:ntth_child(2n) li节点下的偶数tr节点

.a.b 同时包含两个css类的节点 区别于下面

.a .b

css选择器之伪类选择器

h1::text 用来获取节点内的文本内容

a::attr(herf) 用来获取节点的属性的值

img::attr(src)

兼容性更好的提取data的方法extract_first()

作用 : 在使用extract()[0]避免抛出数组下标越界异常

源码 :

AAffA0nNPuCLAAAAAElFTkSuQmCC

解释:

将 for else 视为[整体],如果 x =[] for x in []: 相当于遍历还没有开始就结束了,程序进入[整体部分]的else阶段,返回 默认值default , 如果 x = [1,2,3] 循环遍历一次就返回结果 ,也就是列表中的第一个值 ,[整体]结束

可以传递默认值参数,作为节点不存在时的默认值

发送url请求的对象

源码:

AAffA0nNPuCLAAAAAElFTkSuQmCC

常用:

yield Request(url,callback=self.callback,meta={}) #将请求对象交给scrapy进行下载

从请求里面取出meta里携带的数据

response.get("image","")

进行网址拼接操作的模块

# python3

from urllib import parse

real_url = parse.urljoin(response.url,post_url)

通过三元表达式为数据设定默认值

num = 0 if not match_re else int(match_re.group(1))

图片下载

setting配置:

ITEM_PIPELINES = {

'scrapy.pipelines.images.ImagesPipeline': 1,

}

project_dir = os.path.abspath(os.path.dirname(__file__))

IMAGES_URLS_FIELD = 'image_url' # 传到pipeline时将这个值当数组处理

IMAGES_STORE = os.path.join(project_dir, 'images')

图片url字段的值为什么一定要是可迭代对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值