Scrapy框架入门(pycharm)


一、Scrapy框架是什么?

  • Scrapy是适用于Python的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。
  • Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。其吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等。(百度百科)
  • 功能:
    ----高性能持久化存储
    ----异步数据下载
    ----高性能的数据解析操作
    ----分布式

二、windows系统环境搭配

1.先cmd命令行:

pip  install  whl

2.下载Twested.whl文件:

  • 点这里下载whl文件,我的python是3.8版本,下载Twisted-20.3.0-cp38-cp38-win_amd64.whl,下载对应的即可.
  • 命令行进入whl的下载目录: pip intall Twisted-20.3.0-cp38-cp38-win_amd64.whl

3.命令行:

pip intall pywin32

4.命令行:

pip install scrapy

安装完后,命令行:scrapy,若不报错则安装成功
在这里插入图片描述

三、工程的创建及基本操作

1.创建scrapy工程:

  • 创建一个新的项目,再在其中创建一个目录《九、scrapy框架》
  • 进入“终端”
    在这里插入图片描述
  • 进入当前文件目录:

scrapy startproject xxxPro

cd 路径(路径可以直接复制粘贴)
在这里插入图片描述
-指令:

   scrapy   startproject    MyPro(工程名称随意)

在这里插入图片描述
目录中就会多一个scrapy工程文件:
在这里插入图片描述
在这里插入图片描述

  • 进入工程目录:

cd MyPro

在这里插入图片描述

  • 在spiders子目录中创建一个爬虫文件:

scrapy genspider spiderName www.xxx.com
(spiderName是文件名,www.xxx.com写随意,因为后面可以改)
比如文件名叫SpiderMan,访问百度:scrapy genspider spiderMan www.baidu.com

在这里插入图片描述
在这里插入图片描述

2.基本操作

  • 先看我们创建的爬虫文件SpiderMan.py
    在这里插入图片描述

1.这里面只有一个类,继承了scrapy.Spider类,类中有一个方法parse,有一个参数response
2.name是爬虫文件的名字
3.allowed_domains(允许访问的域名)是一个列表,里面最开始存的就是我们创建时写的www.baidu.com
4.start_urls是我们以后要发送请求的url
5.allowed_domains对start_urls进行限制,即在start_urls中的url,若allowed中没他的域名,则不能发送请求。但一般我们会把 allowed列表注释掉.
6.方法parse是解析数据的方法,response就是我们请求url后得到的响应数据,我们要在这个方法中对其进行解析.

  • 测试运行爬虫文件:

先测试输出一下访问得到的response
在parse中: print(response)
在这里插入图片描述
进入settings.py文件,修改ROBOTSTXT_OBEY =True为False
终端指令:scrapy crawl SpiderMan(文件名)
结果输出许多东西,包括日志,错误,我们需要的信息等:
在这里插入图片描述

  • 去除不需要的无用的数据,保留错误日志:

进入settings.py文件,在任意处添加:LOG_LEVEL=“ERROR”

结果只有我们需要的信息:在这里插入图片描述

  • UA伪装

在settings.py文件中任意位置添加:
USER_AGENT=‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 Edg/92.0.902.55’

四、爬取糗事百科的段子及其作者名字

  • 新建一个scrapy工程 QIushibaike
  • 网址:https://www.qiushibaike.com/text/
  • 我们需要写的是爬虫文件中的parse方法
  • 查网页,找到目标标签:
    在这里插入图片描述
    在这里插入图片描述
    很明显可以找到作者及段子的标签。下面用xpath定位提取文本内容:
    class QiushiSpider(scrapy.Spider):
	    name = 'qiushi'
	    #allowed_domains = ['www.qiushibaike.com']
	    start_urls = ['https://www.qiushibaike.com/text/']
	    def parse(self, response):
	        #解析作者名称+段子内容
	        print('========================================================================')
	        i=1
	        #循环遍历每个div(即每个段子的标签)直到标签为空停止循环
	        while True:
	            #xpath返回的是一个列表,但是列表元素一定是Selector类型的对象
	            #extract可以将Selector对象中的data参数存储的字符串提取出来
	            #content是段子内容,这里我们不用实例化etree对象,直接用response.xpath即可
	            content=response.xpath(f'//div[@class="col1 old-style-col1"]/div[{i}]/a/div/span[1]/text()')
	            author=response.xpath(f'//div[@class="col1 old-style-col1"]/div[{i}]/div/a[2]/h2/text()').extract()
	            if not content:#若为空,则停止循环
	                break
	            else:
	                s=content.extract()
	                name=author[0].strip("\n")
	                #对输出的内容做一下调整,看起来更工整
	                print(f'用户【{name}】:')
	                print(''.join(s).lstrip('\n').rstrip('\n'))
	                i+=1

在这里插入图片描述
PS :若遇到输出的列表为空的情况:可能是Xpath错了,或者检查一下USER_AGENT是否写了(尽量写上述的)
代码如下(示例):

五、持久化存储之基于终端的持久化存储(未完待续)

六、持久化存储之基于管道的持久化存储(含面试题)(未完待续)

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


版权声明:本文为qq_46877697原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。