c爬虫抓取网页数据(Scraoy入门实例一--Scrapy介绍与安装ampamp的安装)
优采云 发布时间: 2021-09-20 22:00c爬虫抓取网页数据(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软件包。流程如下,单击文件>>;设置步骤(设置…)如下图所示。在安装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内容并对捕获的内容进行清理和处理的实验已经完成。在这个过程中,需要熟悉和使用代码和操作,而不是查找在线内容,消化和吸收,并牢记在心。这才是真正要学的知识,不是画葫芦