PyCharm爬⾍实例:使⽤Scrapy抓取⽹页特定内容、数据采集与数据预处理--
biao。。。
Scraoy⼊门实例⼀---Scrapy介绍与安装&PyCharm的安装&项⽬实战
⼀、Scrapy的安装
1.Scrapy介绍
Scrapy是⼀个为了爬取⽹站数据,提取结构性数据⽽编写的应⽤框架。可以应⽤在包括数据挖掘,信息处理或存储历史数据等⼀系列的程序中。其最初是为了页⾯抓取 (更确切来说,⽹络抓取)所设计的,也可以应⽤在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通⽤的⽹络爬⾍。
2.Scrapy安装
推荐使⽤Anaconda安装Scrapy
Anaconda是⼀个开源的包、环境管理神器,Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。从下载安装Anaconda(Individual Edition),根据⾃⼰的系统选择下载,进⾏安装,选择next继续安装,Install for选项选Just for me,选择安装位置后,静待完成安装。
装好之后打开命令⾏,输⼊conda install scrapy,然后根据提⽰按Y,就会将Scrapy及其依赖的包全部下载下来,这样就完成了安装。
注意:在使⽤命令⾏安装scrapy包时,会出现下载超时的问题,即下载失败,我们可以通过修改其的镜像⽂件,以此来提⾼下载scrapy包的速度。可参考博客:
blog.csdn/zhoulizhu/article/details/78809459
这时测试Scrapy是否安装成功:在命令⾏窗⼝输⼊scrapy回车,如果显⽰如下界⾯就证明安装成功:
⼆、PyCharm的安装
1.PyCharm介绍
PyCharm是⼀种 IDE,带有⼀整套可以帮助⽤户在使⽤Python语⾔开发时提⾼其效率的⼯具,⽐如调试、语法⾼亮、Project管理、代码跳转、智能提⽰、⾃动完成、单元测试、版本控制。此外,该IDE提供了⼀些⾼级功能,以⽤于⽀持Django框架下的专业Web开发。
2.PyCharm安装
进⼊,直接点击DownLoad进⾏下载,左边是专业版,右边是社区版,社区版免费,专业版免费试⽤。
如果我们之前没有下载有Python解释器的话,在等待安装的时间我们可以去下载python解释器,进⼊,根据系统、版本下载对应的压缩包即可,在安装完后,在环境变量Path中配置Python解释器的安装路径。可参考博客:www.jb51/article/161175.htm
三、Scrapy抓取⾖瓣项⽬实战
前提:在PyCharm中要使⽤Scrapy的话,必须先在PyCharm中安装所⽀持的Scrapy包,过程如下,点
击⽂件(File)>> 设置(),步骤如下图,我安装Scrapy之前绿⾊框内只有两个Package,如果当你点击后看到有Scrapy包的话,那就不⽤安装了,直接进⾏接下来的操作即可
如果没有Scrapy包的话,点击“+” ,搜索Scrapy包,点击Install Package 进⾏安装
等待安装完成即可。
1.新建项⽬
打开刚安装好的PyCharm,使⽤pycharm⼯具在软件的终端,如果不到PyCharm终端在哪,在左下⾓的底部的Terminal就是了
输⼊命令:scrapy startproject douban 这是使⽤命令⾏来新建⼀个爬⾍项⽬,如下图所⽰,图⽚展⽰的项⽬名为pythonProject
接着在命令⾏输⼊命令:cd douban 进⼊已⽣成的项⽬根⽬录
接着继续在终端键⼊命令:scrapy genspider douban_spider movie.douban ⽣成douban_spider爬⾍⽂件。
此时的项⽬结构如下图所⽰:
2.明确⽬标
我们要练习的⽹站为:
假设,我们抓取top250电影的序列号,电影名,介绍,星级,评价数,电影描述选项
此时,我们在items.py⽂件中定义抓取的数据项,代码如下:
# Define here the models for your scraped items
#
# See documentation in:
# /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']
# ⼊⼝URL
start_urls = ['movie.douban/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:
django项目实例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("movie.douban/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⼊门实例⼆---使⽤Pipeline实现
此次的实战需要重新创建⼀个项⽬,还是需要安装scrapy包,参考上⾯的内容,创建新项⽬的⽅法也参考上⾯的内容,这⾥不再重复赘述。
项⽬⽬录结构如下图所⽰:
⼀、Pipeline介绍
当我们通过Spider爬取数据,通过Item收集数据后,就要对数据进⾏⼀些处理了,因为我们爬取到的数据并不⼀定是我们想要的最终数据,可能还需要进⾏数据的清洗以及验证数据的有效性。Scripy中的Pipeline组件就⽤于数据的处理,⼀个Pipeline组件就是⼀个包含特定接⼝的类,通常只负责⼀种功能的数据处理,在⼀个项⽬中可以同时启⽤多个Pipeline。
⼆、在items.py中定义⾃⼰要抓取的数据
⾸先打开⼀个新的pycharm项⽬,通过终端建⽴新项⽬tutorial,在item中定义想要抓取的数据,例如电影名字,代码如下:
# Define here the models for your scraped items
#
# See documentation in:
# /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 pipe组件是⼀个独⽴的pyhton类,必须实现以process_item(self,item,spider)⽅法每个item pipeline组件都需要调⽤该⽅法,这个⽅法必须返回⼀个具有数据的dict,或者item对象,或者抛出DropItem异常,被丢弃的item将不会被之后的pipeline组件所处理。定义的pipelines.py代码如下所⽰:
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: /en/latest/topics/item-pipeline.html
# useful for handling different item types with a single interface
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论