美文网首页
以北京大黄瓜为例,手把手教你使用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