使用Python的刮擦方法!初学者评论

如今,通过机器学习流行,需要刮擦技术来收集来自网站的数据。

然而,即使刮擦,也可能存在问题,即“应该由框架开发”和“刮痧笔记”将不当。

所以这一次,我们将介绍使用Python进行初学者刮的方法和应用方法。

对于那些对Python的编程学习感到不安的人

我想学习Python学习AI和数据科学
“毕竟我有一个限制”
我想推荐给那些觉得焦虑的人,艾滋病保费计划
AI上各种各样的课程彻底的教练教学它的特点是!

对于那些想要在实践中刺激Python的人,首先是自由”在线咨询加入 ”请试试。

还,艾滋病优质计划的优缺点对于以下文章,请参阅以下文章。
艾迪米(Idemee)的声誉和评论摘要!介绍服用原因

在使用Python刮擦之前:先验知识

首先,在使用Python实现刮擦之前,它描述了什么也是“刮擦”。

如果你说“我知道!”请跳到它。

刮胡子

擦除是指从网页的HTML获取必要的信息。

近年来,由于在执行机器学习时需要庞大数据的数量,因此效率手动差,因此技术与Python和自动化编写程序变得重要。

例如,如果要收集有关捕捞的赛马的信息,请在存储诸如赛马结果和马信息等信息的网页上,并使用程序自动收集页面中的信息,这将是进入的过程。

刮擦从已访问特定URL的HTML提取信息,即从HTTP请求中访问。因此,如上图所示,它最终将返回HTML。

刮痧时要注意

有一个备注,刮擦时必须小心。

追求收集速度的刮擦是能够在集合网页的服务器上写出可怕的负载。

这些行为可能在最坏的情况下抱怨,具有权力业务干扰。

从加载和版权侵权的角度来看,还有许多网站禁止刮擦。

禁止刮擦的网站是在网站的使用条款中描述的。

擦除时,请确保目标站点不禁止刮擦,并执行网站服务器的考虑。

一般刮擦方法

常见的刮擦由多个元素组成,例如抛出HTTP请求或从HTML中删除信息。

因此,在执行擦除时,必须使用多个库并使其匹配目标页面。

一般来说,以下图书馆组合着名。

要求 库获取网页的HTML信息
美丽的汤 库提取HTML信息
库,如登录,磁盘库,其能够在浏览器上获取需要操作的页面

虽然它通过使用这些是复杂的,但它很复杂,但取决于条件,如果涉及的元素如“流传”“dB”,而不仅是实现,而且设计变得重要,而且我将使用时间。

这种方法不适合初学者。

使用Python的刮擦方法

从这里,我们将使用Python与实际代码进行刮擦。

如果您没有Pipenv环境,请参考此安装。

[初学者]特别解释从安装Python建立环境!

Python框架适用于刮初学者:scrapy

所以这次介绍的Python框架是简单。

Scrapy是一种刮框架,可以从获取我们上面解释的数据中轻松设置。

此外,您可以根据Scrapy的基本结构自定义,以创建刮刀而不担心设计。

//cdn-ak.f.st-hatena.com/images/fotolife/t/todays_mitsui/20160924/20160924231058.png

Scrapy结构图

安装

首先,安装Scrapy。

 pip install scrapy 
 conda install scrapy 

プロジェクト作成

Scrapy能够生成从命令启动启动所需的功能。

 scrapy startproject <プロジェクト名> 

这将生成以下结构:

测试Project/
├── scrapy.cfg
└── testProject
    ├── __init__.py
    ├── items.py // スクレイピングする対象の変数を作成する
    ├── middlewares.py //
    ├── pipelines.py //
    ├── __pycache__
    ├── settings.py // クローリングやダウンロードの設定を行う
    └── spiders // ここに自分のスクレイピングのスクリプトを作成する
        ├── __init__.py
        └── __pycache__

使用SCAPAPE的Python刮擦的实施例

嗯,它是一个实现示例。

实现“循环(爬行)并用特定域划分网站。

这次我想废除雅虎新闻信息。
//news.yahoo.co.jp/

确定获取信息的信息

首先,让我们决定得到哪些信息。

我们将打开TestProject / Items.py并实现它。

Scrapy创建一个可变的变量,从域内创建和收集变量。

import scrapy

class TestprojectItem(scrapy.Item):
    # define the fields for your item here like:の
    name = scrapy.Field()
    pass

爬行

我们将实施关于循环(爬行)。

这里需要的是

  1. 爬行开始点
  2. 爬行规则的决定
  3. 爬行的目标

の3つです。

这次,对于简单的结构,它可以仅使用爬网的起点来实现。

# -*- coding: utf-8 -*-
import scrapy
from testProject.items import TestprojectItem

class TestSpider(scrapy.Spider):
    name = "test_spider"
    start_urls = [
        "//news.yahoo.co.jp/" // これがクローリングのスタート地点のURL
    ]

    def parse(self, response):
        """
        ページの巡回経路を記述する関数。
        :return: None
        """
        news_list = response.xpath("//body//ul[@class='toptopics_list']//li")
        self.logger.critical(news_list)
        for news in news_list:
            self.logger.critical(news.xpath("a/@href").extract())
			# ニュースのリンクから情報からもう一度リクエストを投げる
            yield scrapy.Request(url=news.xpath("a/@href").extract()[0],callback=self.parse_page)

刮胡子

接下来是信息获取(刮擦)。

如图所示,我们将从已抛出并返回的HTML中获取信息。

对于Scape,您可以使用CSS选择器和XPath。

这一次,让我们使用一个未知的XPath来实现它。

  • 指定元素
  • `//h1`

  • 元素文本
  • `//p/text()`

  • 指定类别名称等属性
  • `//a[@id=”test”]`

  • 仅指定兄弟元素的特定事物
  • //li[1]/text()

如果您不这样做,大多数数据提取都不会是一个问题。

请参阅下面的其他符号。

实施例

创建一个名为testspider.py的文件/ testproject / spiders:让我们写下以下代码。

# -*- coding: utf-8 -*-
import scrapy
from testProject.items import TestprojectItem

class TestSpider(scrapy.Spider):
    name = "test_spider" # スパイダーの名前(scrapyを実行する際に必要なスクリプトの名前のようなもの)
    start_urls = [
        "//news.yahoo.co.jp/" # どの地点からクローリングを始めるかの指定
    ]

    def parse(self, response):
        """
        ページの巡回経路を記述する関数。
        :return: None
        """
        news_list = response.xpath("//body//ul[@class='toptopics_list']//li") 
        for news in news_list:
            self.logger.critical(news.xpath("a/@href").extract())
            yield scrapy.Request(url=news.xpath("a/@href").extract()[0],callback=self.parse_page)

    def parse_page(self, response):
        item = TestprojectItem()
        item["title"] = response.xpath("//h2[@class='tpcNews_title']/text()").extract()
        item["summary"] = response.xpath("//p[@class='tpcNews_summary']/text()").extract()
        yield item

这一部分有点令人困惑,所以我们将详细解释。

以下循环变为流量。

*提取新闻列表的HTML信息
*从新闻列表中获取标记链接的URL信息
*基于所获取的URL再次指定请求,并指定如何在回调中提取它
*获取信息并将其存储在项目中并作为返回值返回

Scrapy将请求指定的URL执行擦除并作为响应返回。
这存储在解析功能函数的第二个参数中。 (下文中称为响应对象)

此响应对象具有指定URL的响应,即,HTML存储为名为Moby的变量,
另一方面,实现了提取的功能。

这次我正在使用XPath提取,但它对应于第16行部件的那个。

这次,我飞离了新闻列表的链接并获得了其他信息。

从第16到19行开始,获取新闻的列表部分,从它获取标签的链接目标的URL信息。
它是他根据所获取的URL再次抛出请求的第19行。

如何提取请求的值的函数是21秒的PARSE_PAGE。

执行

然后让我们跑

执行命令在实现的脚本的层次结构中实现以下命令。
让我们用CSV吐出,这样这次很容易确认。

Scrapy Runspider.<スパイダーの名前> -o <ファイル名> -t <ファイルフォーマット>

如果是这种情况,那将是一种↓。

CD TestProject /蜘蛛
Scapy Runspider test_spider -o test.csv -t csv

有了这个,
测试project / spiders.
如果生成CSV,这是一个成功的。

调试

这是通过此完成的。
但是,每次都会查看HTML结构,将源代码写入Python并验证结果非常麻烦。

特别是,我想检查是否有可能提取您想要获得的信息,或检查它是否是XPath问题。

因此,验证使用Scrapy的shell。

shell启动

scrapy shell

URLの指定

fetch (<URL>)

xpathで指定してみる

resposen.xpath(<xpath>).extract()

这将显示结果。

环境

Scrapy从Setting.py执行数据到各种设置。
例如,撤消爬行的速度和一旦获得的页面被忽略。

在大多数情况下,

 <パラメーター名>: パラメータ

这是。
这一次,将等待几秒钟的过程放到一个请求。

setting.py.

DOWNLOAD_DELAY: 2

让我们添加一条线
现在它是从一个页面下载数据后等待2秒的设置。

由于有一个其他参数等的列表,请参阅那里。
//docs.scrapy.org/en/latest/topics/settings.html

如果您要刮擦的页面需要SPA或登录

基本上,基本刮擦已经成为可能,但这还不够。

这是因为SCRAPE无法在异步加载Javascrup的页面(SPA)中无法获得完整信息。

因此,通过引入称为Selenium作为座位的库,让我们使用它,所以让我们使用它,所以让我们使用它登录并直接从源代码登录表单或按加载按钮。。

selenium

硒是一种可以从源代码操作浏览器的工具。
官方网站

  • 安装
  •  pip install selenium 
     conda install selenium 
  • 设置
  • 此工具允许您编写自己的信息并登录您的登录表单,因为您可以编写代码并操作浏览器。

    1. 收购要素
    2.         driver.find_element_by_id("id_name") # HTMLのID名でデータを取得する
              driver.find_element_by_class("class_name") # HTMLのID名でデータを取得する
          

      もっと詳しい情報は
      看这里

    3. 表格输入
    4.         form = driver.find_element_by_tag("form")
              form.sendKey("inout text")
          
    5.         form = driver.find_element_by_tag("form")
              form.sendKey("inout text")
              form.submit()
          

    登录处理示例

        form = driver.find_element_by_tag("form")
        email = driver.find_element_by_id("email") # email入力フォームの情報を取得
        email.sendKey("inout text")
        pass = driver.find_element_by_id("password") # password入力フォームの情報を取得
        pass.sendKey("inout text")
        form.submit() # 送信
    

    与Scrapy合作

    嗯,让我们合作谱系和硒。

    Scrapy在称为中间件的特定过程的定时中有一种函数的函数(例如,当在向URL抛出请求之前发生错误时)。

    这一次,它在一个文件中描述了使其易于理解。

    # -*- coding: utf-8 -*-
    import scrapy
    from testProject.items import TestprojectItem
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.chrome.options import Options
    
    class TestSpider(scrapy.Spider):
        name = "test_spider"
        start_urls = [
            "//news.yahoo.co.jp/"
        ]
        def parse(self, response):
            """
            ページの巡回経路を記述する関数。
            :return: None
            """
            options = Options()
            options.add_argument("--headless") # ヘッドレスモードのオプションを追加
            driver = webdriver.Chrome(options=options)
            self.driver.get(url="//news.yahoo.co.jp/") # URL を指定
    
            # ここでログインやクリックなどの処理を挟む
    
            response.replace(body=driver.page_source) #レスポンスオブジェクトのHTMLをseleniumのものと差し替える
            news_list = response.xpath("//body//ul[@class='toptopics_list']//li")
            for news in news_list:
                self.logger.critical(news.xpath("a/@href").extract())
                yield scrapy.Request(url=news.xpath("a/@href").extract()[0],callback=self.parse_page)
    
        def parse_page(self, response):
            item = TestprojectItem()
            item["title"] = response.xpath("//h2[@class='tpcNews_title']/text()").extract()
            item["summary"] = response.xpath("//p[@class='tpcNews_summary']/text()").extract()
            yield item
    

    该配置是通过请求请求对页面和硒的要求指定数据提取处理的形式。

    通过这种方式,点击和登录等,让我们通过Selenium,在单击并登录后获取HTML,并获取这些HTML。

    然后获取HTML并将其传递给Scrapy并提取数据函数。

    摘要:用Python刮!

    刮擦不仅限于机器学习,还要构建特定信息数据库所需的技能。

    有几点要小心,但在思想,让我们发送一个有效的数据收集生活。

    给这篇文章的人

    assa

    我正在京都做工程师。记得阿萨或八个。 主要业务是网络中的爱好。好的