scrapy分页抓取网页(如何构建自定义的爬虫站点和监控程序第一步开发项目)
优采云 发布时间: 2022-04-06 23:27scrapy分页抓取网页(如何构建自定义的爬虫站点和监控程序第一步开发项目)
电商主和管理者可能需要自己爬取网站来监控网页、跟踪网站流量、寻找优化机会等。
对于其中的每一个,都可以使用离散工具、网络爬虫和服务来帮助监控网站。只需相对较少的开发工作,您就可以创建自己的站点爬虫和站点监控系统。
要构建自定义爬虫站点并进行监控,第一步是简单地获取 网站 上所有页面的列表。本文将向您展示如何使用 Python 编程语言和一个名为 Scrapy 的简洁网络爬虫框架轻松生成这些页面的列表。
你需要一个服务器、Python 和 Scrapy
这是一个开发项目。需要安装了 Python 和 Scrapy 的服务器。还需要通过终端应用程序或 SSH 客户端对服务器进行命令行访问。有关安装 Python 的信息也可从 . Scrapy网站 也有很好的安装文档。请确认您的服务器已准备好安装 Python 和 Scrapy。
创建一个 Scrapy 项目
使用 SSH 客户端(如 Windows 的 Putty)或 Mac、Linux 计算机上的终端应用程序,导航到要保存 Scrapy 项目的目录。使用内置的 Scrapy 命令 startproject,我们可以快速生成所需的基础文件。
本文将抓取一个名为《Business Idea Daily》的网站,因此得名“bid”。
生成一个新的 Scrapy Web Spider
为方便起见,Scrapy 还有另一个命令行工具,可以自动生成新的网络蜘蛛。
scrapy genspider -t crawl getbid businessideadaily.com
第一个术语,scrapy,指的是 Scrapy 框架。接下来,有 genspider 命令告诉 Scrapy 我们想要一个新的网络蜘蛛,或者,如果你愿意,一个新的网络爬虫。
-t 告诉 Scrapy 我们要选择一个特定的模板。genspider 命令可以生成四种通用网络蜘蛛模板中的任何一种:basic、crawl、csvfeed 和 xmlfeed。在 -t 之后,我们立即指定所需的模板。在本例中,我们将通过 Scrapy 创建一个名为 CrawlSpider 的模板。“getbid”这个词是蜘蛛的名字。
该命令的最后一部分告诉 Scrapy 我们要抓取哪个 网站。框架将使用它来填充一些新的蜘蛛参数。
定义项目
在 Scrapy 中,Items 是一种组织蜘蛛在抓取特定 网站 时采集东西的方式/模型。虽然我们可以轻松实现我们的目标 - 获取特定 网站 上所有页面的列表 - 不使用 Items,如果我们以后想要扩展我们的爬虫,不使用 Items 可能会限制我们。
要定义一个项目,只需打开我们生成项目时创建的 Scrapy 的 items.py 文件。在其中,将有一个名为 BidItem 的类。类名是基于我们给项目命名的。
class BidItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
pass
将 pass 替换为名为 url 的新字段的定义。
url = scrapy.Field()
保存完成的文档
构建一个网络蜘蛛
接下来打开项目中的spider目录,寻找生成的新Spider Scrapy。在这个例子中,蜘蛛被称为 getbid,所以文件是 getbid.py。
当您在编辑器中打开此文件时,您应该会看到类似以下内容。
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from bid.items import BidItem
class GetbidSpider(CrawlSpider):
name = 'getbid'
allowed_domains = ['businessideadaily.com']
start_urls = ['http://www.businessideadaily.com/']
rules = (
Rule(LinkExtractor(allow=r'Items/'), callback='parse_item', follow=True),
)
def parse_item(self, response):
i = BidItem()
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
return i
我们需要对 Scrapy 为我们生成的代码做一些小的改动。首先,我们需要在规则下修改LinkExtractor的参数。删除括号中的所有内容。
规则(LinkExtractor(),回调='parse_item',follow=True),
通过这次更新,我们的蜘蛛将找到起始页(主页)上的每个链接,将单个链接传递给 parse_item 方法,并跟随链接到 网站 下一页以确保我们获得每个链接的页面。
接下来,我们需要更新 parse_item 方法。删除所有注释行。这些行只是 Scrapy 给我们的例子。
def parse_item(self, response):
i = BidItem()
return i
我喜欢使用有意义的变量名。所以我要把i改成href,这是HTML链接中属性的名称,如果有的话,它会保存目标链接的地址。
def parse_item(自我,响应):
href = 投标项目()
返回href
现在神奇的事情发生了,我们将页面 URL 捕获为 Items。
def parse_item(self, response):
href = BidItem()
href['url'] = response.url
return href
现在是对的。新的 Spider 已准备好爬行。
抓取 网站,获取数据
从命令行,我们想要导航到我们的项目目录。一旦进入该目录,我们将运行一个简单的命令来发送我们的新蜘蛛并获取页面列表。
scrapy爬取getbid -o 012916.csv
这个命令有几个部分。首先,我们参考 Scrapy 框架。我们告诉 Scrapy 我们想要爬行。我们指定使用 getbid 蜘蛛。
-o 告诉 Scrapy 输出结果。该命令的 012916.csv 部分告诉 Scrapy 将结果放入具有该名称的逗号分隔值(.csv)文件中。
在示例中,Scrapy 将返回三个页面地址。我为这个例子选择这个 网站 的原因之一是它只有几页长。如果您在具有数千页的 网站 上定位类似的蜘蛛,则运行需要一些时间,但它会返回类似的响应。
网址
只需几行代码,您就可以为自己的站点监控应用程序奠定基础。
本文由数据银河原创赞助