爬虫 (6)- Scrapy 实战案例 - 爬取不锈钢的相关钢卷信息
超详细创建流程及思路
一. 新建项目
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

最后得到我们需要爬取的数据。
爬虫 (6)- Scrapy 实战案例 - 爬取不锈钢的相关钢卷信息的更多相关文章
- Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
- python网络爬虫之scrapy 调试以及爬取网页
Shell调试: 进入项目所在目录,scrapy shell “网址” 如下例中的: scrapy shell http://www.w3school.com.cn/xml/xml_syntax.as ...
- Scrapy实战:爬取http://quotes.toscrape.com网站数据
需要学习的地方: 1.Scrapy框架流程梳理,各文件的用途等 2.在Scrapy框架中使用MongoDB数据库存储数据 3.提取下一页链接,回调自身函数再次获取数据 重点:从当前页获取下一页的链接, ...
- scrapy实战7爬取搜狗微信:
爬取微信热门文章标题,内容,内容地址,微信公众号,公众号地址,发布日期等 如图 源码地址:https://github.com/huwei86/sougouweixin
- scrapy实战6爬取IT桔子国内所有融资公司:
爬取融资公司,融资公司简介,融资时间,轮次,融资额,投资方,股权占比以及融资公司完整融资历史 如图 源码地址:https://github.com/huwei86/spiderITjuzi
- python实战项目 — 爬取中国票房网年度电影信息并保存在csv
import pandas as pd import requests from bs4 import BeautifulSoup import time def spider(url, header ...
- 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储
http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...
- Python爬虫实战之爬取百度贴吧帖子
大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...
- 爬虫系列5:scrapy动态页面爬取的另一种思路
前面有篇文章给出了爬取动态页面的一种思路,即应用Selenium+Firefox(参考<scrapy动态页面爬取>).但是selenium需要运行本地浏览器,比较耗时,不太适合大规模网页抓 ...
随机推荐
- app store 注册账号生成证书上传app完整的教程
app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...
- cocos2d-x 托付模式的巧妙运用——附源代码(二)
转载请注明出处:http://blog.csdn.net/hust_superman/article/details/38292265,谢谢. 继上一篇将了托付类的详细实现后.这篇来将一下怎样在游戏中 ...
- WCF 之 概述
WCF全称是Windows Communication Foundation,它是.NET3.0的重要组成部分,用来解决Windows下的一些通信方面的问题.WCF是Microsoft平台上的SOA架 ...
- Java之架构(0) - 架构之路
软件架构作为一个概念,体现在技术和业务两个方面. 从技术角度来说:软件架构随着技术的革新不断地更新其内容,软件架构建立于当前技术和一些基本原则的基础之上. 先说一些基本原则: 分层原则:分层是为了降低 ...
- hibernate 关系映射之 主键关联一对一
单向双向在数据库中没有区别,但是在java程序中有区别. 在程序中:双向的通过一个就可以找到另一个,单向的通过设置了对应关系的类可以找到它所对应的类,反过来就不行. 注解方式单向主键关联: 和 ...
- 【服务器时间修改为东八区】包括Apache2和mysql
1.服务器Apache时间修改,可通过修改php.ini进行修改 所以就深入了解了一下, 发现Apache(PHP)的服务器时间时区默认为UTC(Coordinated UniversalTime 世 ...
- C# EF更新当前实体报错 ObjectManager无法管理具有相同键值的多个对象
原因: ObjectManager已经在跟踪此对象 更新实体前判断 if (db.Entry<T>(t).State != EntityState.Modified) db.Entry&l ...
- 几种TCP连接中出现RST的情况(转载)
TCP RST 网络 linux 目录[-] 1 端口未打开 2 请求超时 3 提前关闭 4 在一个已关闭的socket上收到数据 总结 参考文献: 应该没有人会质疑,现在是一个网络时代了.应该不少程 ...
- Spring技术内幕:Spring AOP的实现原理(三)
生成SingleTon代理对象在getSingleTonInstance方法中完毕,这种方法时ProxyFactoryBean生成AopProxy对象的入口.代理对象会封装对target目标对象的调用 ...
- hive 提取用户第一次浏览/购买 某商品的 时间
Hive虽然强大,但是我们遇到的业务需求必定是千奇百怪的. 在做日志解析的时候,我们会遇到访客,和访次的概念. 对于在2个小时之内的访问,我们认为是访问一次,对于两个小时之外的访问,我们认定是再次访问 ...