当前位置:   article > 正文

Python数据爬虫

数据爬虫

一、Scrapy

Scrapy 是用 Python 实现的一个为了爬取网站数据、提取结构性数据而编写的应用框架。 Scrapy 常应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。 通常我们可以很简单的通过Scrapy 框架实现一个爬虫,抓取指定网站的内容或图片。

二、Scrapy架构图(绿线是数据流向)

Scrapy Engine(引擎): 负责SpiderItemPipelineDownloaderScheduler 中间的通讯,信号、数据传递等。

Scheduler(调度器): 它负责接受引擎发送过来的Request请求,并按照一定的 方式进行整理排 列,入队,当引擎需要时,交还给引擎。

Downloader(下载器):负责下载Scrapy Engine(引擎)发送的所有Requests 请求,并将其 获取到的Responses交还给Scrapy Engine(引擎),由引擎交给Spider 来处理,

Spider(爬虫):它负责处理所有Responses,从中分析提取数据,获取Item字 段需要的数 据,并将需要跟进的URL提交给引擎,再次Scheduler(调度器).

Item Pipeline(管道):它负责处理Spider中获取到的Item,并进行进行后期处 理(详细分析、 过滤、存储等)的地方。

Downloader Middlewares(下载中间件):你可以当作是一个可以自定义扩 展下载功能的组件。

Spider MiddlewaresSpider中间件):你可以理解为是一个可以自定扩展 和操作引擎和 Spider中间通信的功能组件(比如进入SpiderResponses;和从 Spider出去的Requests

三、Scrapy的运作流程

代码写好,程序开始运行...

1 引擎:HiSpider, 你要处理哪一个网站?

2 Spider:老大要我处理xxxx.com

3 引擎:你把第一个需要处理的URL给我吧。

4 Spider:给你,第一个URLxxxxxxx.com

5 引擎:Hi!调度器,我这有request请求你帮我排序入队一下。

6 调度器:好的,正在处理你等一下。

7 引擎:Hi!调度器,把你处理好的request请求给我。

8 调度器:给你,这是我处理好的request

9 引擎:Hi!下载器,你按照老大的下载中间件的设置帮我下载一下这个 request请求

10 下载器:好的!给你,这是下载好的东西。(如果失败:sorry,这个 request下载失败了。然

后引擎告诉调度器,这个request下载失败了,你记录一 下,我们待会儿再下载)

11 引擎:HiSpider,这是下载好的东西,并且已经按照老大的下载中间件处 理过了,你自己处

理一下(注意!这儿responses默认是交给def parse()这个函数处 理的)

12 Spider:(处理完毕数据之后对于需要跟进的URL),Hi!引擎,我这里有 两个结果,这个是我

需要跟进的URL,还有这个是我获取到的Item数据。

13 引擎:Hi !管道 我这儿有个item你帮我处理一下!调度器!这是需要跟进 URL你帮我处理下。

然后从第四步开始循环,直到获取完老大需要全部信息。

14 管道调度器:好的,现在就做!

注意!只有当调度器中不存在任何request了,整个程序才会停止,(也就是说,对于下载 失败的 URLScrapy也会重新下载。)

四、制作Scrapy爬虫步骤

1、安装Scrapy框架

          pip install scrapy

2、创建一个爬虫项目

      scrapy  startproject  SpiderDemo(项目名)

3、进入项目,创建一个爬虫样例

         cd SpiderDemo  先进入项目
        scrapy genspider example example.com  创建爬虫样例,会出现example.py样例文件

 样例代码解析

 4、启动爬虫

     在启动之前需要关闭robot协议  settings 文件下: ROBOTSTXT_OBEY =  true改为false

     启动名为 example 的爬虫     scrapy crawl example

5、文件的作用

        items.py: 表示定义一些获取数据的结构信息

        middlewares.py: 表示自定义中间处理过程

        pipelines.py: 用来存储及处理数据

        settings.py : 用来设置当前的爬虫 生成的

        example.py: 用来写我们请求及处理过程

五、实例

1、创建文件

在spiderDemo/spiders中新建一个文件JDCommentSpider

2、准备工作

寻找url,copy

 找header,点击文件后,点击headers,下滑到最下面

2、代码实例

  1. import scrapy
  2. import re
  3. import json
  4. # 创建一个爬虫程序jdpc,定义类名jdpc,并且继承scrapy.Spider
  5. class jdpc(scrapy.Spider):
  6. # 给爬虫创建名称
  7. name = 'jdpc'
  8. # 设置允许的域名
  9. allowed_domains = ['club.jd.com']
  10. header = {
  11. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"
  12. }
  13. # 重写我们父类
  14. def start_requests(self):
  15. '''
  16. yield 返回一个迭代器,可以遍历数据
  17. url: str, 爬取的URL,双斜杠后是域名后后缀是.com
  18. callback: Optional[Callable] = None, 用来处理URL返回的 response 的方法
  19. method: str = "GET", request的请求方式
  20. headers: Optional[dict] = None, 请求头,用于模拟浏览器
  21. '''
  22. url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100009464799&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'
  23. yield scrapy.Request(url=url, headers=self.header, callback=self.myprocess)
  24. def myprocess(self, response: scrapy.http.Response):
  25. # 打印请求内容
  26. print(">>>" * 30)
  27. # 通过re.match进行正则匹配,获取完整的json内容
  28. response_match = re.match('(fetchJSON_comment98\()(.*)(\);)', response.text)
  29. # 通过json库转换成JSON对象
  30. json_res = json.loads(response_match.group(2).replace('\n', '').replace('\r', ''))
  31. # 获取comments中的value
  32. comments = json_res['comments']
  33. # 循环获取每条评论
  34. for comment in comments:
  35. creationTime = comment['creationTime']
  36. nickname = comment['nickname']
  37. productColor = comment['productColor']
  38. productSize = comment['productSize']
  39. content = comment['content']
  40. print(content, creationTime, nickname, productColor, productSize)
  41. print(">>>" * 30)

4、运行:在Python终端中输入scrapy crawl jdpc

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/720315
推荐阅读
相关标签
  

闽ICP备14008679号