分享一下,自己从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'<