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

优采云 发布时间: 2021-09-20 22:00

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

  scraoy示例1介绍——scrapy&安装pycharm&项目实践

  一、Scrapy安装

  1.Scrapy导言

  Scrapy是一个应用程序框架,用于抓取网站数据和提取结构数据。它可以应用于一系列程序中,包括数据挖掘、信息处理或存储历史数据。它最初设计用于页面爬行(更具体地说,web爬行),也可以用于获取API(如Amazon Associates web services)或通用web爬行器返回的数据

  2.Scrapy装置

  建议Anaconda安装slapy

  Anaconda是一个开源软件包和环境管理工件。Anaconda包括180多个科学包及其依赖项,包括CONDA和python。从官网下载并安装Anaconda(*敏*感*词*),选择根据自己的系统下载并安装,选择“下一步”继续安装,选择“仅为我安装”选项,选择安装位置后等待安装完成

  安装完成后,打开命令行,输入CONDA install sweep,然后根据提示按y下载所有scrapy及其相关软件包,从而完成安装

  注意:使用命令行安装sweep包时,将出现下载超时,即下载失败。我们可以通过修改扫描包的图像文件来提高其下载速度。请参阅博客:

  此时,测试scratch的安装是否成功:在命令行窗口中输入scratch。如果显示以下界面,则安装成功:

  

  二、PyCharm安装

  1.PyCharm导言

  Pycharm是一个python ide,它有一套工具可以帮助用户在使用python语言开发时提高效率,如调试、语法突出显示、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制。此外,IDE还提供了一些高级功能来支持Django框架下的专业web开发

  2.PyCharm装置

  进入pycharm官网,直接点击下载即可下载。专业版在左边,社区版在右边。社区版免费,专业版免费试用

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

  三、Scrapy抓豆瓣工程实战

  前提:如果要在pycharm中使用scripy,必须首先在pycharm中安装受支持的scripy软件包。流程如下,单击文件&gt>设置步骤(设置…)如下图所示。在安装scripy之前,绿色框中只有两个软件包。如果单击并看到scripy软件包,则无需安装它。继续进行下一个操作

  

  如果没有scripy软件包,请单击“+”搜索scripy软件包,然后单击Install package安装它

  

  等待安装完成

  1.新项目

  打开新安装的pycharm并使用pycharm工具安装软件终端。如果找不到pycharm终端,只需找到左下角底部的终端即可

  

  输入命令:scratch startproject doublan。使用命令行创建一个新的爬虫项目,如下图所示。图中所示的项目名为Python project

  

  然后在命令行中输入cddoublan命令,以输入生成项目的根目录

  然后继续在终端中键入命令:scratch genspider double_uu2;Spider生成一个double_u2;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.next,我们需要制作爬虫并存储爬虫内容

  在doublan_u中,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文件,因为我们不单独使用它,所以我们不需要运行它,如果允许,将报告错误。导入、主目录的绝对路径和相对路径引入问题的原因是我们使用相对路径“.items”。有兴趣的学生可以到网上找到这些问题的解释

  4.存储内容

  以JSON或CSV格式存储已爬网的内容

  在命令行中,输入:scratch-crawl-double\uspider-O test.json或scratch-crawl-double\uspider-O test.csv

  将爬网数据存储在JSON文件或CSV文件中

  执行爬网命令后,当鼠标焦点位于项目面板上时,将显示born JSON文件或CSV文件。打开JSON或CSV文件后,如果其中没有任何内容,则需要修改代理的代理用户内容

  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-使用管道实现

  在这场实际的战斗中,您需要重新创建一个项目或安装scratch包。参考上述内容。创建新项目的方法也参考了上述内容,这里不再重复

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

  

  一、Pipeline导言

  当我们通过spider抓取数据并通过item采集数据时,我们需要处理数据,因为我们抓取的数据不一定是我们想要的最终数据。我们可能还需要清理数据并验证数据的有效性。scripy中的管道组件用于数据处理。管道组件是收录特定接口的类。它通常只负责一个函数的数据处理。可以在一个项目中同时启用多个管道

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

  首先,打开一个新的pychart项目,通过终端创建一个新的项目教程,并定义要在项目中捕获的数据,例如电影名称。代码如下:

  # 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()

  三、define pipeline.py文件

  每个项目管道组件都是一个独立的pyhton类,必须实现流程项目(self、item、spider)方法。每个项目管道组件都需要调用此方法。此方法必须返回收录数据的dict、项对象或引发dropitem异常。后续管道组件将不会处理丢弃的项目。定义的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]+"\n")

return item

  四、configuring setting.py

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

  

  五、write爬虫文件

  在tutorial/Spider目录\uspider.py文件中创建引号,目录结构如下,并编写初步代码:

  

  quotes\ 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

  六、从启动文件运行

  在doublan文件目录spider uuRun.py中创建一个新的启动文件(文件名可以单独获取),运行该文件,查看结果,并按如下方式编写代码:

  from scrapy import cmdline

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

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

  

  最后,我希望您在编写代码时要小心,不要粗心大意。在我的实验过程中,这是因为要介绍的方法doublanmovieitem被编写为doublanmovieitem,这导致了整个程序的失败。此外,pycharm没有告诉我出了什么问题。我到处找,没有找到解决问题的办法。最后,我检查了很多次,只有在生成方法时才发现,所以您必须小心。此错误如下图所示。表示找不到dobanmovieitem模块。它可能告诉我错误的地方。我没有找到,因为我太好吃了,所以花了很长时间。我希望你能接受一个警告

  

  到目前为止,用刮擦法抓取web内容并对捕获的内容进行清理和处理的实验已经完成。在这个过程中,需要熟悉和使用代码和操作,而不是查找在线内容,消化和吸收,并牢记在心。这才是真正要学的知识,不是画葫芦

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线