超详细创建流程及思路

一. 新建项目

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

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

scrapy startproject bxg

  

二、明确目标

1.我们打算抓取2018年1月到8月,佛山市场各个公司关于304钢卷的价格、规格等数据

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

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

import scrapy

class 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语法文档

xpath("//tbody/tr")

  

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

 

# -*- coding: utf-8 -*-
import scrapy
from 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

  

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

项目源码下载

最新文章

  1. Android之网络数据存储
  2. 深入理解JVM—JVM内存模型
  3. Easyui表单,文本框,下拉菜单三级联动练习代码
  4. ajax调用WebServices服务方法和传参调用WebServices注意事项
  5. RAM与ROM
  6. android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
  7. Java基础知识强化14:Java死亡竞赛题目解析
  8. java中this关键字和static关键字和super关键字的用法
  9. Redis 命令总结
  10. java~gradle构建公用包并上传到仓库
  11. 在servlet中使用spring注解
  12. Leetcode#461. Hamming Distance(汉明距离)
  13. NGINX 安装于配置
  14. PAT甲级1013-1014-1015
  15. VS Code编辑器对git项目的支持
  16. lrzsz 移植到 ARM-linux 嵌入式板子上
  17. GIT的使用及心得
  18. PHP-Open Flash Chart报表生成
  19. JFreeChart API 说明(转)
  20. sso 自动化运维平台

热门文章

  1. iis服务器配置 url rewrite 模块
  2. java源码阅读Observable(观察者模式)
  3. poj 1284 Primitive Roots(原根+欧拉函数)
  4. HTTP常用端口号与对应的服务说明
  5. asp 按钮 调用ajax时 会出现返回错误,尽量使用html按钮进行调用
  6. 使用WinScp连接远程服务器和传输文件
  7. Windows最强ssh客户端推荐 —— Bitvise SSH Client
  8. IOS Exception 1(RangeText=&quot;[SKTexture]()&quot;)
  9. C++11: reference_wrapper
  10. SCRUM敏捷开发规则一栏