博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爬虫 (6)- Scrapy 实战案例 - 爬取不锈钢的相关钢卷信息
阅读量:5884 次
发布时间:2019-06-19

本文共 2951 字,大约阅读时间需要 9 分钟。

超详细创建流程及思路

一. 新建项目

1.创建文件夹,然后在对应文件夹创建一个新的python项目

2.点击Terminal命令行窗口,运行下面的命令创建scrapy项目

scrapy startproject bxg

  

 

二、明确目标

1.我们打算抓取;

(1)打开mySpider目录下的items.py

  配置将我们需要爬取的信息

import scrapyclass BxgItem(scrapy.Item):    vender = scrapy.Field() #  厂家    texture = scrapy.Field() #  材质    thickness = scrapy.Field() # 厚度    cutting = scrapy.Field() # 切边    price = scrapy.Field() # 价格    date = scrapy.Field() # 日期

  

 

三、制作爬虫

1. 爬数据

(1)在bxg/bxg/spiders目录下输入命令,将在bxg/bxg/spiders目录下创建一个名为bxg1的爬虫,并指定爬取域的范围,注意,爬虫名字不能根项目名字一样。

 

scrapy genspider bxg1 "51bxg.com"

 

难点一,这是一个需要付费会员登陆后才能访问的搜索钢卷页面。

我们需要模拟登陆后的状态,所以我们用fidder工具获取到登陆后的cookies先。

  

难点二,用Xpath语法过滤获取到我们需要的数据

 

xpath("//tbody/tr")

  

(2)打开bxg/bxg/spiders目录里的 bxg1.py,替换成下面的代码

 

# -*- coding: utf-8 -*-import scrapyfrom bxg.items import BxgItem# 实在没办法了,可以用这种方法模拟登录,麻烦一点,成功率100%class Bxg1Spider(scrapy.Spider):    name = "bxg1"    allowed_domains = ["51bxg.com"]    url = 'http://www.51bxg.com/web/data_center/coil_price_list.aspx?type=卷&mkt=佛山市场&start_date=2018-01-01&end_date=2018-07-31&mat=J1&pageIndex='    offset = 1    start_urls = [url + str(offset)]    # 从fidder中获取到的cookies数据    cookies = {        'z_session' : 'z+2eu8848810832818181865',        'donot_location_site' : 'true',        'Hm_lvt_4fc2b1e37fd870bc7a31c9d7ea40101f' : '1533546617,1533607332',        'Hm_lpvt_4fc2b1e37fd870bc7a31c9d7ea40101f' : '1533621991'    }    def start_requests(self):        # 具体循环次数需要看搜索到的页数,这里方便测试只导出10页        while (self.offset < 10):            self.start_urls.append(self.url + str(self.offset))            self.offset += 1        for url in self.start_urls:            print(url)            yield scrapy.FormRequest(url, cookies = self.cookies, callback = self.parse_page)    def parse_page(self, response):        items = []        # 循环页面中所有对应Xpath语法过滤到的列        for each in response.xpath("//tbody/tr"):            item = BxgItem()            vender = each.xpath("td[@class='col3']/text()").extract()            texture = each.xpath("td[@class='col4']/text()").extract()            thickness = each.xpath("td[@class='col5']/text()").extract()            cutting = each.xpath("td[@class='col10']/text()").extract()            price = each.xpath("td[@class='col6']/text()").extract()            date = each.xpath("td[@class='col7']/text()").extract()            # xpath返回的是包含一个元素的列表            item['vender'] = vender[0]            item['texture'] = texture[0]            item['thickness'] = thickness[0]            item['cutting'] = cutting[0]            item['price'] = price[0]            item['date'] = date[0]            items.append(item)            # 运行脚本:scrapy crawl bxg1 -o data.csv            # 直接返回最后数据 iconv -f utf-8 -t gbk data.csv > a.csv        return items

  

 

2.取数据

(1)在bxg/bxg/spiders目录下输入命令,运行bxg1爬虫,将爬取的数据导出到data.csv文件中

scrapy crawl bxg1 -o data.csv

  

(2)发现获取的数据编码格式有点问题,出现乱码,需要对文件处理

 

iconv -f utf-8 -t gbk data.csv > a.csv

 

  

最后得到我们需要爬取的数据。

 

转载于:https://www.cnblogs.com/shifu204/p/9663381.html

你可能感兴趣的文章
ASP.NET Core 3.0项目开始“瘦身”
查看>>
Windows Server已可安装Docker,Azure开始支持Mesosphere
查看>>
敏捷现状10周年调查
查看>>
GitLab揭示DevOps价值和挑战的新调查研究
查看>>
Netflix:当你按下“播放”的时候发生了什么?
查看>>
他们10+年的管理经验或许正是你突破瓶颈的关键
查看>>
微软Azure容器服务要关停,你想好怎么迁移了吗?
查看>>
IDC报告:欧洲区块链支出8亿美元,排在首位
查看>>
Linux 4.1内核热补丁成功实践
查看>>
使用Prometheus和Grafana实现SLO
查看>>
Netty和RPC框架线程模型分析
查看>>
Java枚举增强,提供更强的类型支持
查看>>
Effective C++ 3.资源管理
查看>>
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
Kotlin成为正式的Android编程语言
查看>>
在生产环境中安全地运行Docker容器
查看>>
javascript之代理模式
查看>>
微信小程序富文本解析wxParse Alpha0.1-支持HTML及markdown解析
查看>>
【leetcode】38. Count and Say 数字转换
查看>>
Subsets 系列 Leetcode解题记录
查看>>