Python利用scrapy框架,爬取大众点评部分商铺数据~

本文介绍了作者使用Python Scrapy框架在macOS环境下从零开始爬取大众点评商铺数据的过程,包括环境配置、项目创建、爬虫编写、数据存储等方面。遇到问题时,作者通过搜索引擎解决问题,并最终成功将数据保存为JSON文件,还提到后续将数据导入数据库的步骤。
摘要由CSDN通过智能技术生成

分享一下,自己从0开始,用python爬取数据的历程。希望可以可以帮到一起从0开始的小伙伴~~加油。


首先,我的开发环境是:

电脑:macOS Sierra 10.12.6 编译器:PyCharm + 终端

我的电脑自带的Python版本为2.7,我下载了一个Python3.6。使用3.6版本的来进行本次的编写, 将新下载的Python配置到环境变量里。一般他会自带pip。打开终端,cd到pip所在目录,终端输入 pip scrapy

打开终端,cd到你想创建的项目目录下,终端输入 scrapy startproject Test 


就会在该目录下自动生成一些文件,接下来只要修改其中的一些文件就可以了。

使用PyCharm打开,先截图一下目录结构:


根目录就是你创建的项目名,然后会有一个spiders文件夹,里面会有__init__.py 

根目录下的文件,__init__.py , items.py  , middlewares.py , pipelines.py , settings.py

cd到Test目录下,终端输入 scrapy genspider ShopSpider "dianping.com"

会在Test目录下生成一个ShopSpider.py文件。


文件都创建好了。去想要爬的网站看一下它源码的标签结构。

根据想要爬的数据,修改items.py文件

import scrapy


class TestItem(scrapy.Item):
    # 餐馆名
    shop_name = scrapy.Field()
    # 首页图
    shop_img = scrapy.Field()
    # 评星
    shop_star = scrapy.Field()
    # 评价人数
    shop_evaluation = scrapy.Field()
    # 人均价位
    shop_price = scrapy.Field()
    # 菜系
    shop_type = scrapy.Field()
    # 地址1
    shop_address1 = scrapy.Field()
    # 详细地址
    shop_address2 = scrapy.Field()
    # 推荐菜1
    shop_food1 = scrapy.Field()
    # 推荐菜2
    shop_food2 = scrapy.Field()
    # 推荐菜3
    shop_food3 = scrapy.Field()
    # 口味评分
    shop_sweet = scrapy.Field()
    # 环境评分
    shop_environment = scrapy.Field()
    # 服务评分
    shop_server = scrapy.Field()

修改爬虫文件ShopSpider.py

# -*- coding: utf-8 -*-
import scrapy
from Test.items import TestItem


class ShopSpider(scrapy.Spider):
    """
     功能:大众点评沈阳美食店铺数据
    """
    # 爬虫名
    name = 'ShopSpider'
    # 作用范围
    allowed_domains = ['dianping.com']
    # baseurl
    url = 'http://www.dianping.com/shenyang/ch10/g2714p'
    offset = 1
    # 爬取的url
    start_urls = [url + str(offset)]

    def parse(self, response):
        for each in response.xpath("//div[@class='shop-list J_shop-list shop-all-list']/ul/li"):
            # 初始化模型对象≤
            item = TencentItem()
            item['shop_name'] = each.xpath(".//img/@title").extract()[0]

            # 分割图片url
            imgorl = each.xpath(".//img/@src").extract()[0]
            img = imgorl.split('%')[0]
            item['shop_img'] = img

            item['shop_star'] = each.xpath(".//div[@class='comment']/span/@title").extract()[0]

            # 评价人数和平均价格 通过循环次数去找到两个相同的标签下的数据
            price_tag = 0
            for price in each.xpath(".//div[@class='comment']"):
                for p in price.xpath(".//a/b/text()"):
                    if price_tag == 0:
                        # 当评价人数为空的时候,第一个获得到的数据包含'¥'那么就是价格,否则是评价人数
                        ep = price.xpath(".//a/b/text()").extract()[0]
                        if '¥' in ep:
                            item['shop_price'] = ep
                        else:
                            item['shop_evaluation'<
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值