爬虫学习记录-11

  • scrapy的基本使用

1.创建scrapy项目

scrapy创建项目和之前创建项目不一样,而是要在cmd终端中用指令创建对应的项目,首先选择创建项目的目录,如果我们还想将其放在之前代码的文件夹中就可以所在文件夹,然后在终端输入cd,将文件夹拖入终端中即可。之后我们就可以使用scrapy指令创建项目:scrapy startproject 项目名称,需要注意的是项目名称不允许使用数字开头,也不能包含中文

2.创建爬虫文件

我们要在spiders文件夹中创建爬虫文件,首先跳转到spiders文件中:(格式)cd 项目名称\项目名称\spiders,然后就可以创建爬虫文件:scrapy genspider 爬虫文件的名字 要爬取的网页,需要注意的是一般情况下要爬取的网页中不需要添加协议,因为start_urls中会自动拼接协议,这里做一下每个变量的解释

#爬虫的名字,用于运行爬虫时使用的值
name = "baidu"
#允许访问的域名
allowed_domains = ["www.baidu.com"]
#起始url地址,即第一次要访问的域名
#start_urls是在allowed_domains前面加一个http://,后面加一个/
start_urls = ["http://www.baidu.com/"]

#是执行力起始url之后执行的方法,相当于返回的response对象
#相当于response = urllib.request.urlopen(),相当于response = requests.get()
def parse(self, response):
    pass

3.运行爬虫代码

格式:scrapy crawl 爬虫的名字,我们将方法中的pass改为print('前程似锦,未来可期')测试一下,但是从中断即运行结果看,好像没有得到这句话,猜测可能因为做了反爬,scrapy中有一个robot.txt君子协议,我们需要将settings中的ROBOTSTXT_OBEY = True这句话注释掉,注释掉再运行后就得到了这句话

  • scrapy项目结构和基本方法

1.scrapy的项目结构

项目名字
    项目名字
        spiders文件夹  (存储的是爬虫文件)
            init
            自定义的爬虫文件
        init
        items        定义数据结构的地方,是一个继承自scrapy.Item的类  爬取的数据包含哪些
        middlewares  中间件 代理
        pipelines    管道 里面只有一个类,用于处理下载数据的后续处理
        settings     配置文件 比如:是否遵守robots协议,User‐Agent定义等

2.scrapy基本方法

这里我们通过58同城项目对scrapy项目结构和基本方法进行学习,首先选择创建目录创建scrapy项目,然后创建爬虫文件,但创建后会出现以下提示,是因为url中某些特殊接口名的原因,但因为文件已经创建成功,所以不影响使用。 接下来就是删除start_urls中自动拼接的协议并注释掉君子协议

然后我们就要获取网页数据:content = response.text  (获取响应的字符串数据)

                                               content = response.body(获取响应的二进制数据)

                                               response.xpath(直接使用xpath解析response中的内容)

                                               response.extract()(提取seletor对象的data属性值)

                                               response.extract()_first(提取seletor列表的第一个数据)

但在用xpath解析response中内容时得到的是一个空列表,尝试多个xpath路径后结果都是空列表,但使用xpath插件能得到数据,应该不是路径问题,在尝试用urllib方法时却能得到想要的数据,经过后面的案例中我注意到虽然我在创建爬虫文件时复制的url很长,但在pycharm自定义的爬虫文件中却非常短,将其复制到浏览器中发现只是跳转到首页,将爬虫文件中的url手动修改后得到了想要的数据

我们再通过汽车之家的案例加强一下后面几个方法的学习,并以此理解scrapy的工作原理。视频中按照前几步终端操作完成后尝试运行爬虫,发现没有执行,首先想到的是注释掉settings中的协议,但注释掉后发现还是没有执行,查找原因后发现是因为视频中的url后缀是html,如果你的请求接口url是以html结尾时不允许加/。然后在网页中找到我们想要爬取数据的xpath路径,可以借助xpath插件,运行后发现得到是一个selector列表,既然是列表我们就可以用for循环遍历并提取data数据

name_list = response.xpath('//div[@class="brand-rec-box"]//a[@class="name hoveraddunderline"]/@title')
print(name_list)
for name in name_list:
    print(name.extract())
name_list = response.xpath('//div[@class="brand-rec-box"]//a[@class="name hoveraddunderline"]/@title')
price_list = response.xpath('//div[@class="brand-rec-box"]//a[@class="price hoveraddunderline"]/text()')
for i in range(len(name_list)):
    name = name_list[i].extract()
    price = price_list[i].extract()
    print(name,price)

  • scrapy工作原理

(1)引擎向spiders要url

(2)引擎将要爬取的url给调度器

(3)调度器会将url生成的请求对象放入到指定的队列中找

(4)从队列中出队一个请求

(5)引擎将请求交给下载器处理

(6)下载器发送请求获取互联网数据

(7)下载器将数据返回给引擎

(8)引擎将数据再次给到spiders

(9)spiders通过xpath解析该数据,得到数据或者url

(10)spiders将数据或者url给到引擎

(11)引擎判断url是url还是数据,url交给调度器处理,数据交给管道处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值