Python干货:用Scrapy爬电商网站

电商老板,经理均可能须要爬本身经营的网站,目的是监控网页,追踪网站流量,寻找优化机会等。web

对于其中的每一项,都可以经过离散工具,网络抓取工具和服务来帮助监控网站。只需相对较少的开发工做,就能够建立本身的站点爬网程序和站点监视系统。编程

构建自定义的爬虫站点和监控程序, 第一步是简单地获取网站上全部页面的列表。本文将介绍如何使用Python编程语言和一个名为Scrapy的整洁的Web爬网框架来轻松生成这些页面的列表。服务器

你须要一个服务器,Python和Scrapy网络

这是一个开发项目。须要安装Python和Scrapy的服务器。还须要经过终端应用程序或SSH客户端对该服务器的命令行进行访问。还能够从Python.org的文档部分获取有关安装Python的信息。Scrapy网站还有很好的安装文档。请确认您的服务器已准备好安装Python和Scrapy。框架

建立一个Scrapy项目dom

使用像Putty for Windows这样的SSH客户端或Mac,Linux计算机上的终端应用程序,导航到要保留Scrapy项目的目录。使用内置的Scrapy命令startproject,咱们能够快速生成所需的基本文件。scrapy

本文将抓取一个名为Business Idea Daily的网站,所以将该项目命名为“bid”。编程语言

生成一个新的Scrapy Web Spider编辑器

为方便起见,Scrapy还有另外一个命令行工具,能够自动生成新的Web Spider。ide

`scrapy genspider -t crawl getbid businessideadaily.com`

第一个术语,scrapy,参考Scrapy框架。接下来,有genspider命令告诉Scrapy咱们想要一个新的web spider,或者,若是您愿意,还想要一个新的网络爬虫。

-t告诉Scrapy咱们想要选择一个特定的模板。genspider命令能够生成四个通用Web Spider模板中的任何一个:basic,crawl,csvfeed和xmlfeed。直接在-t以后,咱们指定了想要的模板。在这个例子中,咱们将建立被Scrapy称为CrawlSpider的模板。 “getbid”这个词就是spider的名字。

该命令的最后一部分告诉Scrapy咱们想要抓取哪一个网站。框架将使用它来填充一些新spider的参数。 定义Items

在Scrapy中,Items是组织咱们spider爬行特定网站时收集东西的方式/模型。虽然咱们能够很容易地完成咱们的目标- 获取特定网站上全部页面的列表- 不使用Items,但若是咱们想稍后扩展咱们的爬虫,则不使用Items可能会限制咱们。

要定义一个Item,只需打开咱们生成项目时建立的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()

保存作好的文档

构建Web 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的参数。删除括号中的全部内容。

Rule(LinkExtractor(), callback='parse_item', follow=True), 经过此更新,咱们的spider将在起始页面(主页)上找到每一个连接,将单个连接传递给parse_item方法,并按照指向网站下一页的连接来确保咱们获取每一个连接页面。

接下来,咱们须要更新parse_item方法。 删除全部注释行。这些线条只是Scrapy为咱们提供的例子。

def parse_item(self, response):
 i = BidItem()
 return i

我喜欢使用有意义的变量名。 因此我要将i更改成href,这是HTML连接中属性的名称,若是有的话,它将保存目标连接的地址。

def parse_item(self, response):
 href = BidItem()
 return href

如今奇迹发生了,咱们捕获页面URL为Items。

def parse_item(self, response):
 href = BidItem()
 href['url'] = response.url
 return href

这就对了。 新Spider已经准备好爬行了。

抓取网站,获取数据

从命令行,咱们想要导航到咱们的项目目录。 进入该目录后,咱们将运行一个简单的命令来发送咱们的新蜘蛛并获取一个页面列表。

scrapy crawl getbid -o 012916.csv

该命令有几个部分。 首先,咱们参考Scrapy框架。 咱们告诉Scrapy咱们想爬行。 咱们指定要使用getbid蜘蛛。

-o告诉Scrapy输出结果。 该命令的012916.csv部分告诉Scrapy将结果放在带有该名称的逗号分隔值(.csv)文件中。

在示例中,Scrapy将返回三个页面地址。 我为这个例子选择这个网站的缘由之一是它只有几页。 若是你在一个有数千页的网站上瞄准一个相似的蜘蛛,它将须要一些时间来运行,但它会返回一个相似的响应。

url https://businessideadaily.com/auth/login

https://businessideadaily.com/

https://businessideadaily.com/password/email

只需几行代码,您就能够为本身的站点监控应用程序奠基基础。

本文由数据星河原创

相关文章
相关标签/搜索