网站内容抓取工具(如何在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框架,我建议您阅读: