Scrapy

前言:学习scrapy框架的一些网站:

http://www.scrapyd.cn/doc/

https://github.com/

https://github.com/GuanLdong/QidianScrapy

一.创建工程

  1. 新建项目 (scrapy startproject xxx):新建一个新的爬虫项目
  2. 明确目标 (编写items.py):明确你想要抓取的目标
  3. 制作爬虫 (spiders/xxspider.py):制作爬虫开始爬取网页
  4. 存储内容 (pipelines.py):设计管道存储爬取内容
  5. scrapy.cfg: 项目的配置文件。
  6. mySpider/: 项目的Python模块,将会从这里引用代码。
  7. mySpider/items.py: 项目的目标文件。
  8. mySpider/pipelines.py: 项目的管道文件。
  9. mySpider/settings.py: 项目的设置文件。
  10. mySpider/spiders/: 存储爬虫代码目录。

学习xpath:

       1,可以在网站上搜一些教程,基础知识点需要掌握;

                                //表示越级

                                /表示子级

                               @选择属性

        2,例如一个xpath匹配式子:

                                 //div[@class="Oprah"']/tr//a/text()

                                  表示在一个class为Oprah的div下的子标签为tr越级标签为a的文本

        3,同时可以利用浏览器自带的xpath直接进行复制粘贴就可以了,但是在有些情况下会失效,所以要加以调试.

        4,时刻查看用scrapy输出的HTML代码,不然有些情况下请求过于频繁网站可能发现了爬虫,所以进行验证码验证.所以我们的xpath会为空

       5,除了xpath选择器还有css选择器,re正则,bs4

scrapy的使用:
	


	1,创建工程与项目
		1),需要在相应的目录下打开cmd输入一下命令:
			scrapy startproject mingyan


		2),根据提示cd进入下层目录进行创建项目:
			scrapy startproject taobao


	


	2,完成项目创建之后进行项目的配置:
		1),进入settings.py目录下:
			LOG_LEVEL = 'WARN'   实现过滤的功能

			USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 QIHU 360SE'   

			请求头,让网站识别出发请求的是人,不是爬虫,通俗一点就是伪装自己.
			ROBOTSTXT_OBEY = False  不遵循网站的爬虫协议,如果遵循的话会有很多东西爬取不出来.
			ITEM_PIPELINES = {
    		'baidu.pipelines.BaiduPipeline': 300,
			}     开启中间件

	



	3,完成爬虫的逻辑代码:
		1,基础代码有一下几个内容:
			1),查看在代码中输出的HTML
			    res = requests.get('https://www.enterdesk.com/')
			    print(res)

			2),取出获得的列表中的第一个元素:extract_fist()
			3),取出获得的列表中的全部元素:extract()

			4),Python中的循坏语句:(for....in...:)
				1):假设有一个列表list = [1,2,3,4,5,6]
				2):v在这个列表里,并且想把列表里的元素全部遍历出来可以这样写:
					for v in list:
						print(v)

			5),爬虫逻辑实现:(这里用到的提取方法是css提取器)
			mingyan = response.css('div.quote')  # 提取首页所有名言,保存至变量mingyan

        		for v in mingyan:  # 循环获取每一条名言里面的:名言内容、作者、标签

            		text = v.css('.text::text').extract_first()  # 提取名言
            		autor = v.css('.author::text').extract_first()  # 提取作者
            		tags = v.css('.tags .tag::text').extract()  # 提取标签
            		tags = ','.join(tags)  # 数组转换为字符串
            # 接下来,进行保存
            fileName = '%s-语录.txt' % autor  # 定义文件名,如:木心-语录.txt

            with open(fileName, "a+") as f:  # 不同人的名言保存在不同的txt文档,“a+”以追加的形式
                f.write(text)
                f.write('\n')  # ‘\n’ 表示换行
                f.write('标签:' + tags)
                f.write('\n-------\n')
                f.close()

        2,数据匹配的学习,这里我们介绍的是xpath选择器:
        		1),xpath选择器浏览器自带,可以直接粘贴复制,但是有一些需要修改,所以我们简单的学习一下基础常用的部分就可以了.
        		2),主要由
        		//表示越级选取比如HTML的结构为:html>>body>>div class = 'header'>>div  class='floot'>>a 
        		//可以跳级选取   /必须是某级的子标签
        		@选取属性

        学习到这里我们可以进行一页数据的爬取,但是爬去一页,两页可以,要是爬取一百页,一千页呢....接下来我们学习一页一页的进行爬取.

        3,下面的内容十分重要:
        next_page = response.css('li.next a::attr(href)').extract_first()  
        if next_page is not None: 
            next_page = response.urljoin(next_page)
            yield scrapy.Request(next_page, callback=self.parse)
        第一行查看有没有存在下一页的连接.
        第二行判断
        第三行如果存在,就用response.urljoin把相对路径转化为绝对路径
        第三行这里的scrapy.Request()可以传递多个参数,这里只讲两个.next_page是爬取下一页的内容,callback是用那个函数爬取,这里我们使用的是parse,这样就实现了一直爬取直到把数据爬完.

       


        4,scrapy的参数问题
        	def start_requests(self):
        		url = 'http://lab.scrapyd.cn/'
        		tag = getattr(self, 'tag', None)  # 获取tag值,也就是爬取时传过来的参数
       			if tag is not None:  # 判断是否存在tag,若存在,重新构造url
            		url = url + 'tag/' + tag  # 构造url若tag=爱情,url= "http://lab.scrapyd.cn/tag/爱情"
        		yield scrapy.Request(url, self.parse)  # 发送请求爬取参数内容
        	设置参数的原因,(1),方便可以不用再更改代码,比如可以爬完所有的标签
        	参数设置完成之后:在cmd执行
        	scrapy crawl argsSpider -a tag=爱情
        	scrapy crawl argsSpider -a tag=励志

       


        5,运行爬虫scrapy crawl  mingyan2

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值