Python干货:用Scrapy爬电商网站

简介: 电商老板,经理都可能需要爬自己经营的网站,目的是监控网页,追踪网站流量,寻找优化机会等。

电商老板,经理都可能需要爬自己经营的网站,目的是监控网页,追踪网站流量,寻找优化机会等。

对于其中的每一项,均可以通过离散工具,网络抓取工具和服务来帮助监控网站。只需相对较少的开发工作,就可以创建自己的站点爬网程序和站点监视系统。

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

3b99c8eff4f36d92399a04aa08931c9f

你需要一个服务器,Python和Scrapy

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

创建一个Scrapy项目

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

本文将抓取一个名为Business Idea Daily的网站,因此将该项目命名为“bid”。

生成一个新的Scrapy Web Spider

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

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()

保存做好的文档

385ed9ef9a6bca4a2285640825ac79eb

构建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

只需几行代码,您就可以为自己的站点监控应用程序奠定基础。

本文由数据星河原创内容

相关文章
|
2月前
|
JavaScript 前端开发 API
Python和Vue:构建动态网站的最佳伙伴
【4月更文挑战第10天】在数字时代,Python和Vue.js成为构建互动性网站的理想组合。Python以其强大的后端处理和丰富的库(如Django和Flask)支持高效开发,而Vue.js则凭借其轻量级、数据驱动的前端框架提供直观界面。两者结合,实现前后端分离,双向数据绑定,高效API交互,以及高度灵活性和可扩展性。庞大的社区和生态系统为开发过程提供资源支持,优化用户体验。这种技术栈适合从简单的博客平台到复杂应用的各类项目,为企业带来竞争优势。
|
2月前
|
存储 前端开发 机器人
Python网络数据抓取(6):Scrapy 实战
Python网络数据抓取(6):Scrapy 实战
38 2
|
2月前
|
数据采集 中间件 Python
Scrapy爬虫:利用代理服务器爬取热门网站数据
Scrapy爬虫:利用代理服务器爬取热门网站数据
|
4天前
|
数据采集 搜索推荐 算法
Python基于协同过滤算法进行电子商务网站用户行为分析及服务智能推荐
Python基于协同过滤算法进行电子商务网站用户行为分析及服务智能推荐
|
26天前
|
存储 数据挖掘 索引
Python streamlit框架开发数据分析网站并免费部署
使用Python的Streamlit框架,开发了一个在线数据分析工具,替代Excel查看设备温度CSV数据。通过pandas读取数据,matplotlib绘制图表。程序处理CSV,提取所需列,计算最大最小平均值,用户可多选查看特定数据。[GitHub](https://github.com/yigedaigua/MGHB)上有完整代码,应用已部署至Streamlit Cloud。
|
5天前
|
数据采集 自然语言处理 搜索推荐
Python实现基于LDA主题模型进行电商产品评论数据情感分析
Python实现基于LDA主题模型进行电商产品评论数据情感分析
|
1月前
|
数据采集 存储 中间件
Scrapy,作为一款强大的Python网络爬虫框架,凭借其高效、灵活、易扩展的特性,深受开发者的喜爱
【6月更文挑战第10天】Scrapy是Python的高效爬虫框架,以其异步处理、多线程及中间件机制提升爬取效率。它提供丰富组件和API,支持灵活的数据抓取、清洗、存储,可扩展到各种数据库。通过自定义组件,Scrapy能适应动态网页和应对反爬策略,同时与数据分析库集成进行复杂分析。但需注意遵守法律法规和道德规范,以合法合规的方式进行爬虫开发。随着技术发展,Scrapy在数据收集领域将持续发挥关键作用。
67 4
|
17天前
|
程序员 Python
老程序员分享:python爬取电影网站信息并写入文件
老程序员分享:python爬取电影网站信息并写入文件
11 0
|
17天前
|
Web App开发 iOS开发 Python
经验大分享:scrapy框架爬取糗妹妹网站qiumeimei.com图片
经验大分享:scrapy框架爬取糗妹妹网站qiumeimei.com图片
10 0
|
2月前
|
数据采集 存储 中间件
Python高效爬虫——scrapy介绍与使用
Scrapy是一个快速且高效的网页抓取框架,用于抓取网站并从中提取结构化数据。它可用于多种用途,从数据挖掘到监控和自动化测试。 相比于自己通过requests等模块开发爬虫,scrapy能极大的提高开发效率,包括且不限于以下原因: 1. 它是一个异步框架,并且能通过配置调节并发量,还可以针对域名或ip进行精准控制 2. 内置了xpath等提取器,方便提取结构化数据 3. 有爬虫中间件和下载中间件,可以轻松地添加、修改或删除请求和响应的处理逻辑,从而增强了框架的可扩展性 4. 通过管道方式存储数据,更加方便快捷的开发各种数据储存方式