整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

手把手教你使用scrapy框架来爬取北京新发地价格行

手把手教你使用scrapy框架来爬取北京新发地价格行情(实战篇)

源:Python爬虫与数据挖掘

作者:霖hero

前言

关于Scrapy理论的知识,可以参考我的上一篇文章,这里不再赘述,直接上干货。

实战演练

爬取分析

首先我们进入北京新发地价格行情网页并打开开发者工具,如下图所示:

经过简单的查找,发现每个getPriceData.html存放着价格行情的数据,由此可得,我们可以通过getPriceData.html来进行数据的获取。

观察Headers请求,如下图所示:

发现它是POST请求,请求URL链接是http://www.xinfadi.com.cn/getPriceData.html,current是翻页的重要参数,limit是每页有多少行数据,我们可以构造消息体,代码如下所示:

data={
'limit': '20',
'current':page
}

通过scrapy.Request()方法将消息体传入到参数里面。

或者我们可以根据测试和观察规律,自己构造URL链接,通过观察分析,请求的URL链接可以为:

http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t=1
http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t=2
http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t=3

创建Spider爬虫

分析北京新发地价格行情后,接下来我们首先创建一个Scrapy项目,使用如下命令:

scrapy startproject Vegetables

这样我们就成功创建了一个Scrapy项目,项目文件如下所示:

接下来创建spider爬虫,使用如下命令:

scrapy genspider vegetables www.xinfadi.com.cn

创建后vegetables.py内容如下所示:

import scrapy


class VegetablesSpider(scrapy.Spider):
   name='vegetables'
   allowed_domains=['www.xinfadi.com.cn']
   start_urls=['https://www.xinfadi.com.cn']
   
   def parse(self, response):
       pass

提取数据

在提取数据前,我们首先把要爬取的数据字段在items.py文件中定义好,代码如下所示:

import scrapy


class VegetablesItem(scrapy.Item):
   # define the fields for your item here like:
   productName=scrapy.Field()
   lowPrice=scrapy.Field()
   highPrice=scrapy.Field()

这里我们定义了三个字段分别是productName、lowPrice、highPrice

定义好字段后,接下来将在创建的vegetables.py文件中进行数据的提取,具体代码如下

import scrapy
from Vegetables.items import VegetablesItem


class VegetablesSpider(scrapy.Spider):
   name='vegetables'
   allowed_domains=['www.xinfadi.com.cn']
   def start_requests(self):
       for i in range(1, 3):
           url=f'http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t={i}'
           yield scrapy.Request(url=url, callback=self.parse)


   def parse(self, response):
       html=response.json()
       fooddata=html.get('list')
       for i in fooddata:
           item=VegetablesItem()
           item['highPrice']=i.get('highPrice'),
           item['lowPrice']=i.get('lowPrice'),
           item['prodName']=i.get('prodName'),
           yield item

首先我们导入vegetablesitem,使用start_requests函数实现翻页,大家可以使用刚才我们所讲的方法实现翻页,实现翻页后,我们通过编写parse()方法实现数据的获取,首先我们把引擎响应的数据以json()格式存放在html里面,调用get()方法来提取我们想要的数据,最后通过yield生成器返回给引擎。

最后我们在settings.py设置引擎的启动,代码如下所示:

ITEM_PIPELINES={
  'Vegetables.pipelines.VegetablesPipeline': 300,
}

在这里我们就不保存数据在MongoDB数据库里面了,我们直接启动Spider爬虫并把数据以csv格式输出,使用如下命令:

scrapy crawl vegetables -o 11.c

运行结果如下:

好了,Scrapy框架爬取北京新发地就讲解到这里了,感谢观看!!!

总结

大家好,我是霖hero。这篇文章基于上篇理论文章,主要给大家分享了Scrapy爬虫框架的实战内容,Scrapy是一个基于Twisted的异步处理框架,是纯Python实现的爬虫框架,是提取结构性数据而编写的应用框架,其架构清晰,模块之间的耦合程度低,可扩展性极强。

轻快、可直接播放的 GIF 小动画很适合嵌入图文。

但是很多图文编辑器复制粘贴 GIF 图像都会出现问题。例如粘贴GIF 变成一帧静态图像,或提示无效图像,或粘贴正常但发布上传时报错 …… 然后我们只能挨个 GIF 都重复一遍:录屏 > 压缩 > 保存 > 添加图像 > 上传 > 插入文章 ……

使用极简录屏软件 Gif123 可以大幅简化上面的操作:Gif123 可以一键录屏,一键复制动画,在图文编辑器里 Ctrl +V 一下粘贴动画就可以解决所有问题。Gif123 复制的 GIF 格式拥有良好的兼容性,不会动画变静态图像,不会提示无效图像,上传时不会报错。

Gif123 简介

Gif123 是一个开源软件,体积很小只有 755KB,独立 EXE 无任何外部依赖,兼容 Windows XP,Vista,Win7,Win8,Win10,Win11 …… 等所有流行桌面操作系统。

软件极简单,只有 3 个主要按钮:录制、预览、复制。

Gif123 主窗口就是录屏选框,可拖动选框选择要录制的区域。相比很多更复杂更强大的 GIF 录制工具,Gif123 的操作非常简单,一看就会。

Gif123 虽然很小,但是在 GIF 有限的颜色限制下仍然可以显著提升画质。录制完成以后可自动调用强悍的 Gifsicle 压缩 GIF 文件体积。并且在高分屏下可自动压缩 GIF 至正常分辨率 —— 以避免浏览图像时重复放大。

Gif123 可录制合成鼠标轨迹,可调整鼠标指针大小,可在设置中打开鼠标指针高亮光圈功能,高亮光圈可跟随鼠标移动以指示鼠标位置,单击鼠标时会显示动画光圈( 光圈颜色透明度为0 时仅显示单击动画 ):

按左键光圈就会向左侧压缩成半圆,按右键光圈就会向右侧压缩成半圆,按中键就会向内侧缩小为小圆。很多录屏软件仅用颜色区分左右按键 —— 说实话这可能只有录屏的人明白,看动画的人估计分不清。

Gif123 最小化时按录屏热键可显示快速选框:

切换到预览模式且暂停后可编辑动画帧,在预览动画上点右键可弹出菜单,可以暂停动画帧( 在图像上按回车可以快速「暂停 / 继续」播放动画 ),动画暂停状态下可以使用鼠标滚轮、帧滑块控件、Page Up/Down ……等手动翻页,暂停状态可以方便地抽帧删帧。

预览模式可在上图界面底部的输入框中重新设置优化参数。在参数输入框中点任何一个参数的任何位置,按鼠标滚轮可以快速调整数值,如下图:

可实时预览优化效果与优化后的文件体积。重新优化总是基于原始图像 —— 上次优化设定不会影响当前优化效果。

我为什么要开发 Gif123

Gif123 是我使用 aardio 开发的。至于 aardio 也是我开发的编程语言。关于 aardio 请参考文章:2022年,开发独立 EXE 桌面应用程序,用什么语言、技术合适

GIF 还是非常有用的,很多时候我们需要这种小、简单、不复杂又够用的东西。GIF 录屏的工具虽然很多,但是用着用着有时候就发现不需要的功能很多,需要的功能它又没有或者不方便,所以我决定自己用 aardio 写一个,实际上要不了几句代码。

开发经验分享:揭开剪贴板的秘密

GIF 录制好了,我们一般当然是复制并分享了,如果我们打开图像再去复制还是有些麻烦,能一键复制多好。但是这个看起来简单的事 —— 还真是有些麻烦,首先系统剪贴板其实并不支持 GIF 图像,所以很多软件里复制 GIF 只复制了第一帧。

但是我们发现 IE 是可以复制GIF的,有的文章说通过复制HTML就可以了,用 aardio 来写实际上就是这样:

import win.clip.html;
var html=win.clip.html();
html.write(`<img src="c:\test.gif" />`)

网上很多文章都这么写,但实际上根据我的测试,这样复制 GIF 以后浏览器或者其他一些软件里并不能粘贴。

这个其实可以理解,浏览器是没有权限访问本地文件的,即使他得到了剪贴板中的HTML,也没有权限去读任意位置的本地文件,考虑到了这一点,我决定把本地图像转换为 Data URL 直接嵌入HTML,主要代码如下:

import win.clip.html;
import crypt;

var html=win.clip.html();
var dataUrl=string.format('data:image/gif;base64,%s'
  ,crypt.encodeBin( string.loadBuffer(filePah),,0x40000001/*_CRYPT_STRING_BASE64*/) ); 
  
html.write(`<img src="`+ dataUrl+`" />`,,false);

上面的代码实现了以后,我在浏览器图文编辑器里测试了一下,用这种方法复制一个 GIF 文件以后,再到编辑器里 Ctrl + V 粘贴,看到了 GIF 动画在编辑器里显示出来了,还没高兴零点几秒,弹出一个错误信息:粘贴图像失败。看了一下是远程错误,猜测他把这个当作普通远程图像地址去处理了。

然后在其他聊天软件里试着粘贴了一下,也没任何反应。看来此路不通。看到有人说可以复制为 CF_HDROP 格式,好吧,aardio 干这事倒也方便,代码如下:

import win.clip.file;
win.clip.file.write( filePath );

其实这等价于在资源管理器里右键复制文件。用上面的方法复制了图像以后,到聊天软件里粘贴试了一下,粘贴出来的是一个文件图标,并没有认出是 GIF 动画。

想起之前看到有人说:

IE 能复制 GIF,但是在剪贴板里看到的只是静态的 BMP 图像,不知道 IE 是如何实现的,

难道 ……

于是试着在剪贴板里先复制 GIF 第一帧的静态图像,再复制文件本身(同时复制2种格式),用这种方法复制了一个 GIF 图像,然后到 聊天工具里粘贴,这回粘贴出来的还真是 GIF 动画 ,直接就显示预览动画了 —— 完美!

然后打开浏览器编辑器,试着粘贴了一下,遇到2种不同的反应,第1种是出现了静态图像 —— 没动画,第2种是静态图像也没有,细节没有深究。想起之前复制 Data URL 失败的过程,这难道是 …… 于是赶紧换第 3 种方法,复制第一帧静态图像,复制文件,然后再复制 Data URL ,一气呵成三连击以后终于成功了,浏览器编辑器里完美粘贴出来 GIF 动画,试了很多软件以及图文编辑器也都能完美支持。

于是,我又加了一个库 win.clip.gif,用起来就太简单了:

import win.clip.gif;
win.clip.gif.write( filePath );

您看这就是 aardio 的好处了,像这种库一天能写一打出来,再复杂的代码都可以简化,这得益于 aardio 良好的模块化支持。

4年的时候小编还是个苦逼青年(说的好像现在不苦逼一样)闲来无事,想做一本属于自己的电子书,最开始的时候,我想的是利用html进行网页文档的制作,结果发现自己毫无网页基础,实在是举步维艰,毕竟小编是个24k纯理工男,学的还是化学专业。

不过不要紧,在我的孜孜不倦和勇于探索的精神下,终于找到一款简单易学,零网页基础,零电脑基础,零排版基础,零智商基础的翻页电子书制作软件:iebook (让大家贱笑了)

在那个苦逼的买不起电脑的年代,小编天天泡在网吧,旁边是各种小学生风骚犀利的lol操作让我自愧不如,经过一个星期的钻研(只怪中途网吧断电,文档无情的没有备份,那感觉让人绝望)终于做出了人生自己的第一本电子书——《后青春期的诗》效果大概是这样的:

iebook的功能是能实现翻页,背景音乐,点击跳转,自动滚动等,如果你想做散文诗歌或者故事类的文章,不失为一个不错的选择。

最终效果一般是以exe格式存在,也可以在线发表,看起来是不是很高大上?

说到技术含量嘛,前面也说过,不难,只要具备基本的审美观和核心内容,加上模板的插入,音乐的插入,制作出一本exe文档的电子书简直易如反掌,就像走在路上随随便便就能捡张毛爷爷一样,就是这么easy。对电子书感兴趣的朋友可以关注小编公众号fish1923 回复“软件”获取iebook,或者回复“电子书”查看本人制作的电子书,欢迎探讨学习。

不过正所谓“师傅领进门,修行靠个人”任何软件的应用本质上是很简单的,例如ps,例如cad,但是要想做到极致却需要付出很大的努力。就iebook这个软件来说,我随便讲几个关键点,也许会对你的制作方面有些帮助,让你少走一些弯路。

  1. 插入帧。

    就以标准组件来说,一般会有卷首页,封面,版页,封底。我们主要是插入版页如图所示:

点击添加页面就会右方菜单栏出现多个帧,每一帧就是我们说的“每一页”,所谓帧,通俗点说就是一个单位,可以理解为ps里的每一个图层,每一帧都是静止的图象。你只需要在每一个帧上编辑即可。

然后插入文字,模板,都是可以手动拖拽的,复制、放大、缩小、旋转等等操作,都灰常方便。

2.关于模板的下载

在添加完帧之后,接下来就是模板的下载了

如图所示,不管是组合模板,还是页面背景,图文,文字模板,装饰,特效。点击下方的模板下载,都是会跳转到iebook官方网站下载的,比较精美的当然是需要付费下载的(这个世界没有免费的午餐)。

3.关于属性栏的设置。

这就不多说了吧,零智商操作,音乐可以从电脑端导入,我就不废话了。

4.生成的电子杂志去哪里了?

  1. 正在编译(生成)EXE电子杂志;

  2. 电子杂志编译(生成)完毕;单击打开文件夹按钮,打开电子杂志所在路径,您可以将生成好的电子杂志发给好友分享;己经编译完毕的电子杂志,预览整体效果。

这样,一篇精美的翻页电子书就生成了,是不是一下子就由一个屌丝青年变身成为文艺小青年了,总的来说,这款软件还是十分简单好用的。

其实,谁又天生优秀呢?优秀来源于对简单事情的重复操作和追求极致的精神。欢迎关注小编公众号fish1923 探讨学习!