美文网首页
以北京大黄瓜为例,手把手教你使用scrapy抓取数据并存入Mon

以北京大黄瓜为例,手把手教你使用scrapy抓取数据并存入Mon

作者: 途途途途 | 来源:发表于2021-09-13 09:03 被阅读0次

第一次对scrapy做了简单的了解并且使用scrapy实战爬取了B站单页小姐姐视频信息。详情如下:

Scrapy爬取B站小姐姐入门教程,结果万万没想到!

第二次使用scrapy翻页爬取了糗事百科13页的段子信息

Scrapy翻页爬取糗事百科所有段子后,我总结出的...

目标获取

今天我们使用scrapy爬取北京瓜果蔬菜单价并将其存入数据库MongoDB

网站首页如下图:

我们要获取的目标有瓜果蔬菜的

名称、最低价、最高价、均价、产地还有价格发布时间等

spider爬虫

首先我们建立scrapy项目

建立完毕结构图如下:

网页分析

F12打开网页源码,如下这是一个POST请求的网页,

    分页参数由limit控制,页面显示由current控制

并且每页链接都是相同的,变化的只有分页参数limit。

所以我们可以构造一个请求url:

forpageinrange(1,50+1):

url =f'http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t={page}'

并且我们请求的数据是json结构,如下:

所有的内容都在如下list列表中

发送请求

我们先来打印浏览器响应数据

ic(response.text)

结果如下,成功打印出了json结构的全部信息

但是我们需要的数据都在json结构的list列表中,所以还需要对请求到的数据进一步处理,获取list

# 获取蔬菜列表

veg_list = response.json()['list']

ic(veg_list)

list结构数据打印如下:

分析至此所有的信息都以获取到,接下来我们要做的就是提取我们要获取的数据

名称、最低价、最高价、均价、产地还有价格发布时间等

forveginveg_list:

# 实例化scrapy对象

item = BjXinfaItem()

# 蔬菜名称

item['prodName'] = veg['prodName']

# 最低价格

item['lowPrice'] = veg['lowPrice']

# 最高价格

item['highPrice'] = veg['highPrice']

# 平均价格

item['avgPrice'] = veg['avgPrice']

# 产地

item['origin'] = veg['place']

# 日期

rlsDate = veg['pubDate']

item['rlsDate'] =''.join(rlsDate).split(' ')[0]

'''

ic| item: {'avgPrice': '0.43',

'highPrice': '0.45',

'lowPrice': '0.4',

'origin': '冀',

'prodName': '大白菜',

'rlsDate': '2021-09-11'}

ic| item: {'avgPrice': '0.7',

'highPrice': '0.8',

'lowPrice': '0.6',

'origin': '冀',

'prodName': '娃娃菜',

'rlsDate': '2021-09-11'}

ic| item: {'avgPrice': '1.0',

'highPrice': '1.2',

'lowPrice': '0.8',

'origin': '',

'prodName': '小白菜',

'rlsDate': '2021-09-11'}

ic| item: {'avgPrice': '0.8',

'highPrice': '1.0',

'lowPrice': '0.6',

'origin': '冀',

'prodName': '圆白菜',

'rlsDate': '2021-09-11'}

ic| item: {'avgPrice': '0.65',

'highPrice': '0.7',

'lowPrice': '0.6',

'origin': '冀',

'prodName': '紫甘蓝',

'rlsDate': '2021-09-11'}

ic| item: {'avgPrice': '1.2',

'highPrice': '1.5',

'lowPrice': '0.9',

'origin': '冀',

'prodName': '芹菜',

'rlsDate': '2021-09-11'}

'''

存入数据

当我们要把数据保存成文件的时候,不需要任何额外的代码,只要执行如下代码即可:

scrapy crawl spider爬虫名 -o xxx.json#保存为JSON文件

scrapy crawl spider爬虫名 -o xxx.jl或jsonlines#每个Item输出一行json

scrapy crawl spider爬虫名 -o xxx.csv#保存为csv文件

scrapy crawl spider爬虫名 -o xxx.xml#保存为xml文件

想要保存为什么格式的文件,只要修改后缀就可以了,在这里我就不一一例举了。

我们在此将其保存为json格式

# 保存文件到本地

withopen('./北京菜价.json','a+', encoding='utf-8')asf:

lines = json.dumps(dict(item), ensure_ascii=False) +'\n'

f.write(lines)

每页20条数据,50页攻击1000条数据如下:

存入MongoDB

MongoDB的安装之前专门拉出来一节单独讲的,需要的小伙伴可以看一下

Python也能操作MongoDB数据库!

这里我们在setting中引入MongoDB。名称如下:

mongo_host ='127.0.0.1'

mongo_port =27017

mongo_db_name ='beijing'

mongo_db_collection ='beijing_price'

数据查询如下:

相关文章

网友评论

      本文标题:以北京大黄瓜为例,手把手教你使用scrapy抓取数据并存入Mon

      本文链接:https://www.haomeiwen.com/subject/naixgltx.html