python网页数据抓取( Scraoy入门实例一--Scrapy介绍与安装ampamp的安装)

优采云 发布时间: 2022-04-14 05:19

  python网页数据抓取(

Scraoy入门实例一--Scrapy介绍与安装ampamp的安装)

  Python爬虫示例:使用Scrapy抓取网页采集数据

  

  Scraoy入门示例1——Scrapy介绍与安装&PyCharm安装&项目实战

  一、Scrapy 的安装

  1.Scrapy介绍

  Scrapy 是一个应用程序框架,用于抓取 网站 数据并提取结构化数据。它可以用于一系列程序,包括数据挖掘、信息处理或存储历史数据。它最初是为网页抓取(更准确地说,网页抓取)而设计的,但也可用于获取 API(例如 Amazon Associates Web 服务)或通用网络爬虫返回的数据。

  2.Scrapy 安装

  建议使用 Anaconda 安装 Scrapy

  Anaconda 是一个开源包和环境管理神器。Anaconda 包括 180 多个科学包及其依赖项,包括 conda 和 Python。从官网下载安装Anaconda(*敏*感*词*),根据自己的系统选择下载,安装,选择next继续安装,Install for选项选择Just for me,选择安装位置,等待安装完成。

  安装完成后,打开命令行,输入conda install scrapy,根据提示按Y,即可下载所有Scrapy及其依赖包,从而完成安装。

  注意:使用命令行安装scrapy包时,会出现下载超时问题,即下载失败。我们可以通过修改scrapy包的镜像文件来提高scrapy包的下载速度。你可以参考博客:

  这时候测试Scrapy是否安装成功:在命令行窗口输入scrapy,回车。如果出现如下界面,则表示安装成功:

  

  二、安装 PyCharm

  1.PyCharm介绍

  PyCharm 是一个 Python IDE,拥有一套完整的工具,可以帮助用户在使用 Python 语言进行开发时提高效率,例如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制。此外,IDE 还提供高级功能以支持 Django 框架下的专业 Web 开发。

  2.PyCharm 安装

  进入PyCharm官网,直接点击DownLoad下载,左边是专业版,右边是社区版,社区版免费,专业版免费试用。

  如果我们之前没有下载过Python解释器,可以在等待安装的同时下载Python解释器,进入Python官网,根据系统和版本下载对应的压缩包。安装完成后,在环境变量 Path 中配置 Python 解释器的安装路径。你可以参考博客:

  三、Scrapy 抓豆瓣项目在行动

  前提条件:如果要在 PyCharm 中使用 Scrapy,首先必须在 PyCharm 中安装支持的 Scrapy 包。流程如下,点击File>>Settings...里面只有两个Package。如果点击时看到一个 Scrapy 包,则不需要安装它,只需执行以下步骤即可。

  

  如果没有Scrapy包,点击“+”,搜索Scrapy包,点击Install Package进行安装

  

  等待安装完成。

  1.新项目

  打开新安装的PyCharm,使用软件终端中的pycharm工具,如果找不到PyCharm终端在哪里,就是左下角下方的Terminal。

  输入命令:scrapy startproject douban 这是使用命令行新建爬虫项目,如下图,图中项目名称为pythonProject

  

  然后在命令行输入命令:cd douban进入生成项目的根目录

  然后在终端继续输入命令:scrapy genspider douban_spider 生成douban_spider爬虫文件。

  此时的项目结构如下图所示:

  

  2.明确目标

  我们要练习的 网站 是:

  假设,我们获取 top250 电影的序列号、电影名称、介绍、星级、评论数、电影描述选项

  至此,我们在 items.py 文件中定义抓取的数据项,代码如下:

  # Define here the models for your scraped items

  #

  # See documentation in:

  # https://docs.scrapy.org/en/latest/topics/items.html

  import scrapy

  class DoubanItem(scrapy.Item):

  # define the fields for your item here like:

  # name = scrapy.Field()

  # 序列号

  serial_number = scrapy.Field();

  # 电影名

  movie_name = scrapy.Field();

  # 介绍

  introduce = scrapy.Field();

  # 星级

  star = scrapy.Field();

  # 评价数

  evaluate = scrapy.Field();

  # 描述

  describe = scrapy.Field();

  pass

  3.接下来,我们需要创建爬虫并存储爬取的内容

  在douban_spider.py爬虫文件中编写具体的逻辑代码,如下:

  # -*- coding: utf-8 -*-

  import scrapy

  from ..items import DoubanItem

  class DoubanSpiderSpider(scrapy.Spider):

  name = "douban_spider"

  # 允许的域名

  allowed_domains = ["movie.douban.com"]

  # 入口URL

  start_urls = ["https://movie.douban.com/top250"]

  def parse(self, response):

  movie_list = response.xpath("//div[@class="article"]//ol[@class="grid_view"]/li")

  #循环电影的条目

  for i_item in movie_list:

  #导入item,进行数据解析

  douban_item = DoubanItem()

  douban_item["serial_number"] = i_item.xpath(".//div[@class="item"]//em/text()").extract_first()

  douban_item["movie_name"] = i_item.xpath(".//div[@class="info"]//div[@class="hd"]/a/span[1]/text()").extract_first()

  #如果文件有多行进行解析

  content = i_item.xpath(".//div[@class="info"]//div[@class="bd"]/p[1]/text()").extract()

  for i_content in content:

  content_s ="".join( i_content.split())

  douban_item["introduce"] = content_s

  douban_item["star"] = i_item.xpath(".//span[@class="rating_num"]/text()").extract_first()

  douban_item["evaluate"] = i_item.xpath(".//div[@class="star"]//span[4]/text()").extract_first()

  douban_item["describe"] = i_item.xpath(".//p[@class="quote"]/span/text()").extract_first()

  print(douban_item)

  yield douban_item

  #解析下一页,取后一页的XPATH

  next_link = response.xpath("//span[@class="next"]/link/@href").extract()

  if next_link:

  next_link = next_link[0]

  yield scrapy.Request("https://movie.douban.com/top250"+next_link,callback=self.parse)

  这个时候不需要运行这个python文件,因为我们不单独使用,所以不需要运行。允许报告错误。关于import引入的问题,关于主目录的绝对路径和相对路径,原因是我们使用了相对路径。“..items”,对相关内容感兴趣的同学可以去网上找一下这类问题的解释。

  4.存储内容

  将爬取的内容存储为 json 或 csv 格式的文件

  在命令行输入:scrapy crawl douban_spider -o test.json 或者 scrapy crawl douban_spider -o test.csv

  将爬取的数据存储在 json 文件或 csv 文件中。

  执行爬取命令后,当鼠标聚焦到项目面板时,会显示生成的 json 文件或 csv 文件。打开json或者csv文件后,如果里面什么都没有,那么我们需要做进一步的修改,修改代理USER_AGENT的内容,

  USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.8 Safari/537.36"

  

  如果存储在json文件中,所有内容都会以十六进制形式显示,可以通过相应的方法进行转码。这里就不多解释了,如下图所示:

  

  并且存储在csv文件中,它会直接显示我们要爬取的所有内容,如下图:

  

  至此,我们就完成了网站具体内容的爬取。接下来,我们需要对爬取的数据进行处理。

  分向線 - - - - - - - - - - - - - - - - - - - - - - - - -------------------------------------------------- - - - - - - - - - - 分向線

  Scraoy 入门示例 2 --- 使用流水线实现

  在本次实战中,需要重新创建项目或者安装scrapy包。参考上面的内容,新建项目的方法也参考上面的内容,这里不再赘述。

  项目目录结构如下图所示:

  

  一、流水线介绍

  当我们通过Spider爬取数据,通过Item采集数据时,我们需要对数据做一些处理,因为我们爬取的数据不一定是我们想要的最终数据,可能还需要对数据进行清洗和验证。数据有效性。Scripy 中的 Pipeline 组件用于数据处理。Pipeline 组件是一个收录特定接口的类。它通常只负责一项功能的数据处理。在一个项目中可以同时启用多个管道。

  二、在items.py中定义你要抓取的数据

  首先打开一个新的pycharm项目,通过终端新建一个项目教程,在item中定义你要抓取的数据,比如电影名,代码如下:

  # Define here the models for your scraped items

  #

  # See documentation in:

  # https://docs.scrapy.org/en/latest/topics/items.html

  import scrapy

  class TutorialItem(scrapy.Item):

  # define the fields for your item here like:

  name = scrapy.Field()

  pass

  class DoubanmovieItem(scrapy.Item):

  # define the fields for your item here like:

  # name = scrapy.Field()

  moiveName = scrapy.Field()

  三、定义 pipeline.py 文件

  每个 item 管道组件都是一个独立的 pyhton 类,必须实现 process_item(self, item, spider) 方法。每个item管道组件都需要调用这个方法。该方法必须返回一个带有数据的dict,或者一个item对象,或者抛出一个DropItem异常,并且被丢弃的item不会被后续管道组件处理。定义的 pipelines.py 代码如下所示:

  # Define your item pipelines here

  #

  # Don"t forget to add your pipeline to the ITEM_PIPELINES setting

  # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html

  # useful for handling different item types with a single interface

  from itemadapter import ItemAdapter

  class TutorialPipeline(object):

  def process_item(self, item, spider):

  return item

  import time

  class DoubanmoviePipeline(object):

  def process_item(self, item, spider):

  now = time.strftime("%Y-%m-%d", time.localtime())

  fileName = "douban" + now + ".txt"

  with open(fileName, "a", encoding="utf-8") as fp:

  fp.write(item["moiveName"][0]+"")

  return item

  四、配置设置.py

  由于这次使用的是管道,所以我们需要在settings.py中打开管道通道注释,并在其中添加一条新记录,如下图所示:

  

  五、写爬虫文件

  在tutorial/spiders目录下创建quotes_spider.py文件,目录结构如下,编写初步代码:

  

  quote_spider.py 代码如下:

  import scrapy

  from items import DoubanmovieItem

  class QuotesSpider(scrapy.Spider):

  name = "doubanSpider"

  allowed_domains = ["douban.com"]

  start_urls = ["http://movie.douban.com/cinema/nowplaying",

  "http://movie.douban.com/cinema/nowplaying/beijing/"]

  def parse(self, response):

  print("--" * 20 )

  #print(response.body)

  print("==" * 20 )

  subSelector = response.xpath("//li[@class="stitle"]")

  items = []

  for sub in subSelector:

  #print(sub.xpath("normalize-space(./a/text())").extract())

  print(sub)

  item = DoubanmovieItem()

  item["moiveName"] = sub.xpath("normalize-space(./a/text())").extract()

  items.append(item)

  print(items)

  return items

  六、从启动文件运行

  在豆瓣文件目录下新建启动文件douban_spider_run.py(文件名可取不同),运行文件查看结果。编写代码如下:

  from scrapy import cmdline

  cmdline.execute("scrapy crawl doubanSpider".split())

  最后,处理后的爬取数据如下图(部分)所示:

  

  最后,希望大家在写代码的时候可以小心,不要马虎。实验的时候写了方法DoubanmovieItem作为DobanmovieItem引入,导致整个程序失败,而且PyCharm也没有告诉我哪里错了,我到处找问题的解决方法也没找到。最后查了很多遍,都是在生成方法的时候才发现的,所以一定要小心。该错误如下图所示。提示找不到DobanmovieItem模块。它可能告诉我错误的地方。因为懒得找,找了很久。希望大家多多注意!

  

  至此,使用Scrapy抓取网页内容,并对抓取到的内容进行清理和处理的实验已经完成。要求熟悉并使用此过程中的代码和操作,不要在网上搜索和消化。吸收它并记住它,这是学习知识的真正方法,而不仅仅是画一个勺子。

  以上是python爬虫示例:使用Scrapy爬取网页采集数据的全部内容,源码链接:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线