网站内容抓取工具(如何在PyCharm中安装Scrapy?3的安装提示信息)

优采云 发布时间: 2021-09-21 00:04

  网站内容抓取工具(如何在PyCharm中安装Scrapy?3的安装提示信息)

  在谈到爬虫时,我们必须提到scrapy框架,因为它可以帮助提高爬虫的效率,更好地实现爬虫

  Scrapy是一个应用程序框架,用于获取网页数据和提取结构数据。该框架被封装,包括请求(异步调度和处理)、下载(多线程下载)、解析器(选择器)和twisted(异步处理)。对于网站内容爬行,其速度非常快

  也许读者会感到困惑。有了这样一个好的爬虫框架,为什么上一章学习了使用请求库来请求网页数据。事实上,requests是一个功能非常强大的库,可以满足大多数web页面数据采集的需要。其工作原理是向服务器发送数据请求。数据下载和分析需要自行处理,灵活性高;由于scrapy框架的封装,其灵活性降低

  至于使用哪种爬虫,完全取决于个人的实际需要。在没有明确要求的情况下,作者建议初学者选择请求库来请求网页数据,然后在业务实践

  中生成实际需求时考虑SCOPY框架。

  在scripy安装过程中使用pip直接安装scripy会生成一些错误的安装提示,导致scripy安装失败。当然,既然存在问题,就必须有很多解决办法。在~gohlke/pythonlibs网站中,有许多适合windows的已编译Python第三方库。读者只需根据错误的安装提示信息找到相应的软件包并安装即可。这里将不详细说明此方法。本节主要介绍如何在pycharm中安装scrapy

  第一步是选择Anaconda3作为编译环境。单击pycharm左上角的file选项,然后单击settings以打开如图1所示的界面。然后展开项目解释器的下拉菜单,选择Anaconda 3的下拉菜单:

  

  图1

  Anaconda需要提前安装,安装后可以添加Anaconda编译环境

  步骤2:安装scrapy。单击图1所示界面右上角的绿色加号,弹出图2所示界面。输入并搜索“scratch”,然后单击“install package”按钮。等待出现“成功安装的包装“scratch”:

  

  图2

  案例:用scrapy抢占股市。本案例将使用scrapy框架获取安全性网站A股票市场爬行过程分为以下五个步骤:创建一个刮擦式爬虫项目,调用CMD,输入以下代码,然后按[enter]创建刮擦式爬虫项目:

  scrapy Start项目stockstar

  其中,scratch startproject是一个固定命令,stockstar是作者设置的项目名称

  运行上述代码的目的是创建相应的项目文件,如下所示:

  项目结构如图3所示:

  

  图3项目结构

  创建scratch项目后,默认情况下设置文件中会打开这样一条语句

  POBOTSOXT_uuuo服从=真

  Robots.txt是一个遵循robot协议的文件。scrapy启动后,首先访问网站的robots.txt文件,然后确定网站的爬行范围。有时我们需要将此配置项设置为false。在settings.py文件中,可以按如下方式修改文件属性

  ROBOTSTXT_uuuuo=错误

  右键单击E:\stockstar\stockstar文件夹,并在弹出式快捷菜单中选择“将目录标记为”命令→ 选择“sources root”命令,这可以使导入包的语法更加简洁,如图4所示

  

  图4

  定义一个项目容器。项是用于存储爬网数据的容器。其使用方法类似于Python字典。它为拼写错误导致的未定义字段错误提供了额外的保护

  首先,我们需要分析要爬网的网页数据,并定义爬网记录的数据结构。在相应的items.py中创建相应的字段。详细代码如下:

  

import scrapy

from scrapy.loader import ItemLoader

from scrapy.loader.processors import TakeFirst

class StockstarItemLoader (ItemLoader):

#自定义itemloader,用于存储爬虫所抓取的字段内容

default_output_processor = TakeFirst()

class StockstarItem (scrapy.Item) : # 建立相应的字段

#define the fields for your item here like:

#name = scrapy.Field()

code = scrapy.Field() # 股票代码

abbr = scrapy.Field() # 股票简称

last_trade = scrapy.Field() # 最新价

chg_ratio = scrapy.Field() # 涨跌幅

chg_amt = scrapy.Field() # 涨跌额

chg_ratio_5min = scrapy.Field() # 5分钟涨幅

volumn = scrapy.Field() # 成交量

turn_over = scrapy.Field() # 成交额

  定义基本爬网器设置的设置文件,定义可以在相应的settings.py文件中显示中文的JSON行导出器,并将爬网间隔设置为0.25第二,详细代码如下:

  

from scrapy.exporters import JsonLinesItemExporter #默认显示的中文是阅读性较差的Unicode字符

#需要定义子类显示出原来的字符集(将父类的ensure_ascii属性设置为False即可)

class CustomJsonLinesItemExporter(JsonLinesItemExporter):

def __init__(self, file, **kwargs):

super (CustomJsonLinesItemExporter, self).__init__(file, ensure_ascii=False, **kwargs)

#启用新定义的Exporter类\

FEED_EXPORTERS = {

'json':'stockstar.settings.CustomJsonLinesItemExporter',

}

...

#Configure a delay for requests for the same website (default: 0)

#See http:IIscrapy.readthedocs.org/en/latest/topics/settings.html#download-delay

#See also autothrottle settings and docs DOWNLOAD DELAY = 0.25

  在编写爬虫逻辑之前,您需要创建一个。stockstar/spider子文件下的Py文件,用于定义爬虫程序的范围,即初始URL。接下来,定义一个名为parse的函数来解析服务器返回的内容

  首先,在CMD中输入代码并生成Spider代码,如下所示:

  cd股票之星

  刮屑原浆

  此时,将在spider文件夹下创建一个后缀为stock.py的文件,该文件将生成start_uuURL,即爬虫的起始地址,并创建一个名为parse的自定义函数,随后的爬虫逻辑将写入parse函数。文档详细信息如图5所示:

  

  图5

  代码详细信息如图6所示:

  

  图6

  然后,在spider/stock.py文件中定义爬虫程序逻辑。详细代码如下:

  

import scrapy

from items import StockstarItem, StockstarItemLoader\

class StockSpider(scrapy.Spider):

name = 'stock' #定义爬虫名称

allowed_domains = ['quote.stockstar.com'] #定义爬虫域

start_urls = ['http://quote.stockstar.com/stock/ranklist_a_3_1_1.html']

#定义开始爬虫链接

def parse (self, response) : #撰写爬虫逻辑

page = int (response.url.split("_")[-1].split(".")[0])#抓取页码

item_nodes = response.css('#datalist tr')

for item_node in item_nodes:

#根据item文件中所定义的字段内容,进行字段内容的抓取

item_loader = StockstarItemLoader(item=StockstarItem(), selector = item_node)

item_loader.add_css("code", "td:nth-child(1) a::text")

item_loader.add_css("abbr", "td:nth-child(2) a::text")

item_loader.add_css("last_trade", “td:nth-child(3) span::text")

item_loader.add_css("chg_ratio", "td:nth-child(4) span::text")

item_loader.add_css("chg_amt", "td:nth-child(5) span::text")

item_loader.add_css("chg_ratio_5min","td:nth-child(6) span::text")

item_loader.add_css("volumn", "td:nth-child(7)::text")

item_loader.add_css ("turn_over", "td:nth-child(8) :: text")

stock_item = item_loader.load_item()

yield stock_item

if item_nodes:

next_page = page + 1

next_url = response.url.replace ("{0}.html".format (page) , "{0}.html".format(next_page))

yield scrapy.Request(url=next_url, callback=self.parse)

  代码调试为了便于调试,请在E:\stockstar下创建一个新的main.py。调试代码如下:

  从scrapy.cmdline导入执行

  执行([“scrapy”、“crawl”、“stock”、“-o”、“items.json”])

  这相当于在E:\stockstar下执行命令“scratch crawl stock-o items.json”,将已爬网的数据导出到items.json文件

  E:\stockstar>scrapy crawl stock-o items.json

  您可以在代码中设置断点(例如在spider/stock.py中),然后单击“run”选项按钮→ 在弹出菜单中选择“debug'main”命令进行调试,如图7和图8所示

  

  图7

  

  图8

  最后,在pycharm中运行“main”,操作界面如图9所示:

  

  图9

  将捕获的数据以JSON格式保存在项目容器中。知识扩展本文从实战(捕获股市)中解释了scrapy框架,并致力于让初学者快速理解Python crawler scarpy框架的使用

  然而,这种实用的伤疤的空间毕竟是有限的。如果您想深入了解scripy框架,我建议您阅读:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线