首页 » 99链接平台 » 我用python爬取了敦煌网(我用爬虫数据解析获取)

我用python爬取了敦煌网(我用爬虫数据解析获取)

落叶飘零 2024-11-03 02:28:37 0

扫一扫用手机浏览

文章目录 [+]

做跨境电商,产品的市场行情是非常关键的指标,无论是新品开发还是市场调研都有需求,那么今天我们就来做个敦煌网的产品价格与销量查询的工具。

一、基础版本

其实敦煌网是很客气的网站,基本上没有做针对的反爬措施,既然别人这么客气,我们也要懂得礼貌,做爬虫的同学都知道爬虫的基本礼仪。
那就是该停就停,能在晚上没有太多人的时候运行就放在人少的时候,频率不要太高。
不过还我们的工具,一开始就打算按照关键词进行爬取,所以对网站的负担不会太重,可以放心的使用。

我用python爬取了敦煌网(我用爬虫数据解析获取) 99链接平台
(图片来自网络侵删)

话不多说,先上代码

内容比较简单,为了让大家不至于看的太累,注释什么的大多被我删除了。

下面我们来简单的讲解下这段代码。

首先,我们导入要用的包:

主要流程都在__main__里面,我们通过sys获取的关键词和页数,这里没有异常处理,其实应该对传入的参数进行异常处理下的。
然后直接运行get_data函数获取我们所需的数据。
我们直接在get_data函数里调用的save_data把数据存储到csv文件中。

这个是最早的版本,大概是在2016写的,现在运行还是能够成功。
这个版本,只获取的价格与销量。

二、第一次重构

其实很早就想重构一下,一直没有动力,大概是2017年3月的时候,有朋友问我对标题是怎么做的,终于找到理由重构一下了, 简单重构了下,新代码比较丑,数据储存还有bug, 当时太晚了,就没优化了,实现了获取产品标题,价格,起订量,销量,好评,店铺地址,卖家名,店铺好评率的获取。

老样子,简单讲解下,其实主体和第一次写的没有太大差别,主要是字段解析这里,多添加了一些内容:

BeautifulSoup的css selector其实还是很好用的,当然,解析速度是相当来说慢了点,不过影响不是太大。
后面我们会用lxml的xpath来重构,速度会好很多。
对于新手,或者前端不是太理解的人来说,做爬虫还是比较坑的,我的经验来说,做爬虫最好还是要懂点前端, 当然懂得越多越好,爬虫与前端的反爬虫一直是这样相爱相杀,所以你越了解你的敌人,你就越得心就手。

三、用类的思想做个小框架

前面的内容基本已经能满足我们的需求了,但是类的思想可以让我们做到解耦,功能模块更清晰。

先上一个scrapy的框架图来镇楼:

主要内容有scrapy引擎,scheduler调度器,itempipline数据处理,downloader下载,spiders爬虫程序。

我们就模仿这个框架做一个简单的:

有了这几个类,我们已经可以完成一个简单的框架了。
main.py里主要是保证任务的进行。

主程序内容比较简单,导入相应的类,构建了一个爬虫主类,传入关键词和页数,爬虫就愉快的开始爬网了。

核心就在这个craw函数。

首先url管理器构建一个初始url,告诉爬虫从哪儿开始爬取。
然后爬虫开始看url管理器里有没有新的url,有就获取新的url,把新的url传入下载器进行下载。
然后下载器把下载的数据传入解析器进行解析。
数据处理器收集解析器解析出来的新数据。
数据处理器保存数据到本地。

下面我们一个一个讲解这几个功能类:

url_manage.pyurl管理器

build_url构建初始网址

add_new_url添加新的url到管理器

has_new_url检查管理器里有没有新的url

get_new_url从管理器里获取新的url

show_urls遍历管理器里的url

这里的功能实际上都是针对的__init__里面设置的两个set,这里没有使用数据库,使用数据库也是一样的效果。

html_downloader.py下载器

下载器其实很简单,只有一个方法,就是下载,这里直接引入requests包,使用其相关方法就完成了download方法。

html_parser.py网页解析器

解析器是整个项目的核心,不过核心代码其实和第二次重构里差不多,基本上就是把第二次的核心代码挪过来就可以用了。

就不多说了,parse方法里引用_get_new_data解析完成返回数据。

html_outputer.py数据处理器

其实这一个叫做数据处理器可能不太准确,叫做输出器可能更好,因为它的主要做用只是输出数据到本地存储。
而且我们真正的数据处理其实都在解析器里已经完成了,大家可以看上面的代码。
而且这里只有三个方法.

collect_data收集前面处理好的数据

to_html把数据输出成html格式

to_csv把数据输出成csv格式,这个就和我们之前做的一样,不过这里使用了csv包,效率更高

可以看到输出到html稍微麻烦点,主要是要写html特有的标签,而csv就相当简单了,csv包里有相应的方法,可以直接使用。

就这样,整体项目被我们用小框架实现了。

后记

下一篇,我们用python自带的图形库tk来实现一个界面,方便普通用户使用。

标签:

相关文章