scrapy-北京新发地 爬虫实战练习

北京新发地

新发地-价格行情

前提:安装有scrapy

打开pycharm,点击Terminal,输入scrapy startproject name

ps:name为你要创建的工程的名字

如下:我创建的scrapy工程名为bjxfd,即北京新发地的拼音缩写

scrapy startproject bjxfd

 

 

之后会自动生成目录和一系列文件

5abf85782b7d4d5f819749d9e7bd689f.png

这时提示你需要创建源文件

2c98d736454e430889b1e484a7fcab0c.png

 先cd 工程文件名 进入scrapy工程目录

然后使用scrapy genspider scrapyname www.xxx.com

scrapy genspider scrapyname www.xxx.com

其中,scrapyname为爬虫名,自己定义,www.xxx.com是要爬取网站的域名网址

7fff1257210f4ccc8b1de1e1746b3b48.png

在scrapy工程目录里,我们可以看到多了一个你刚刚创建的name的名字,比如我刚刚创建的爬虫文件名为xfd,这就多了个xfd.py文件,用于写爬虫代码的

33bb5b4f6f124e6dafdce917f5d81cb0.png

到这里我们的项目就建好了,可以开始写代码了

 

根据网页源代码结构查看,发现数据是在json内,且为post请求

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYnVn5pm66YCg,size_15,color_FFFFFF,t_70,g_se,x_16

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYnVn5pm66YCg,size_20,color_FFFFFF,t_70,g_se,x_16

 

 

根据分析可得,http://www.xinfadi.com.cn/getPriceData.html为具体数据的基础url

http://www.xinfadi.com.cn/getPriceData.html?limit=20&current=1的url中,limit参数为一页数据量为20条数据,current为页数

文件目录结构

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYnVn5pm66YCg,size_8,color_FFFFFF,t_70,g_se,x_16

settings.py

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYnVn5pm66YCg,size_20,color_FFFFFF,t_70,g_se,x_16

# 种类,名字,最低价,最高阶,平均价,规格,产地,单位,发布时间
FEED_EXPORT_FIELDS = ['kind', 'name', 'lowPrice', 'highPrice', 'avgPrice', 'norms', 'place', 'unit', 'date']
# 屏蔽一些日志信息
LOG_LEVEL='WARNING'

items.py

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYnVn5pm66YCg,size_18,color_FFFFFF,t_70,g_se,x_16

 代码如下:

import scrapy
# 种类,名字,最低价,最高阶,平均价,规格,产地,单位,发布时间
class XinfadiItem(scrapy.Item):
    kind = scrapy.Field()
    name = scrapy.Field()
    lowPrice = scrapy.Field()
    highPrice = scrapy.Field()
    avgPrice = scrapy.Field()
    norms = scrapy.Field()
    place = scrapy.Field()
    unit = scrapy.Field()
    date = scrapy.Field()

spiders.py

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYnVn5pm66YCg,size_20,color_FFFFFF,t_70,g_se,x_16

代码如下:

import scrapy
import json
from ..items import XinfadiItem
​
class XfdSpiderSpider(scrapy.Spider):
    name = 'xfd_spider'
    allowed_domains = ['www.xinfadi.com.cn']
    start_urls = 'http://www.xinfadi.com.cn/priceDetail.html'
​
    def start_requests(self):
        max = 10
        for page in range(1, max+1):
            urls = f'http://www.xinfadi.com.cn/getPriceData.html?limit=20&current={page}'
            yield scrapy.Request(urls, callback=self.parse)
​
    def parse(self, response):
        json_data = json.loads(response.text)['list']
        for i in json_data:
            item = XinfadiItem()
            item['kind'] = i['prodCat']
            item['name'] = i['prodName']
            item['lowPrice'] = i['lowPrice']
            item['highPrice'] = i['highPrice']
            item['avgPrice'] = i['avgPrice']
            item['norms'] = i['specInfo']
            item['place'] = i['place']
            item['unit'] = i['unitInfo']
            item['date'] = i['pubDate']
            yield item

运行结果如下

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAYnVn5pm66YCg,size_20,color_FFFFFF,t_70,g_se,x_16

执行爬虫程序,在Terminal中执行scrapy crawl 爬虫文件名

scrapy crawl xfd

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值