scrapy爬虫 爬取天猫进口零食网页

爬虫入门教程戳这里

出于某些原因,想调戏下天猫的反爬虫机制,于是就有了这篇记录

源码已传osgit ,感兴趣可以戳下

scrapyTmail

正文开始

分析目标(items) 解析路径(xpath)

目标为天猫超市的进口商品

研究一下待抓取网页中, 需要爬的内容,如下图

天猫超市例图

我的目标是 商品名、销量、价格,图当然也是可以爬的,不过本次不爬

商品源码

新建爬虫【处理items,pipelines,settings,spider】

首先新建一个爬虫,起个喜欢或者任性的名字

scrapy startproject tmail
  1. 更改下级目录中的 **items.py **

我依据网站上的起名添加了 titile,sold(sum是保留字),price

items.py

  1. 更改pipelines.pysettings.py中的内容(当然也可以先创小蜘蛛啦)

因为爬的都是字符,就直接保存为json文件(下图为初版,后遇到问题有更改) pipeline初版

在setting.py中添加download_delay和 item_pipelines

 DOWNLOAD_DELAY = 3
 ITEM_PIPELINES = {
     'tmail.pipelines.TmailPipeline' : 300,
 }

事实上我还加了COOKIES_ENABLED = False,后来证明。。是傻,见后文

  1. 接下来就是愉快得整蜘蛛

    • 在spiders文件夹中新建一个xxx.py (我的是tmailspider.py),打开之

    • 加 name(运行爬虫时用) ,allowed_domains (域名),

    • start_url(必需吐槽下天猫的后缀在下个菜鸡看不懂,并且用虚拟机开的不一样,不过都能用就是了,我的 在图中隐藏了部分,各位喜欢自己开个就好)

      爬虫初版

    • 分析目标xpath,加parse方法 下图为最初版

      parse方法初版

试运行,处理bug【robots.txt,更改useragent(无用),重定向302错误】

  • 嗯 接下来 我就运行了

    scrapy crawl tmail.com
    

    结果如图 我被robots.txt文件挡住了

    debug1

    看来不能优雅了,第一次更改 settings.py 中 加/改

    ROBOTSTXT_OBEY = False
    
  • 改完后,来我们看看结果

    debug2

    重定向302??这是什么鬼 ?看出我是用爬虫了 ?

  • 没事,前两天才学了改请求头,我加个变化的useragent试试 (这个可以看看我的上一篇博客)

    改useragent

    然并卵,它报同样!的!错!

    好吧,老实上网搜,

分析cookies

网上并没有详细方法,只有几个朋友提供的分析cookies的思路

然而我并不会,于是就找到一篇对我接下来的修改起很大作用的文章 Scrapy用Cookie实现模拟登录

方法如下:

  1. 登录了自己的天猫,用ctrl + shift + i 快捷键打开工具,在network下找到需要的cookie(真 好长一串)

    拿到cookie后需要处理成``` 'xxx' : 'xxxx',

2. 重载spider内方法start_requests(注意:此时start_urls已废,我保留它仅为了保存原网址)
   ![start_request1](https://static.oschina.net/uploads/img/201609/02170927_V4Zi.png "重写1")

3. 中间是很长的cookies,因为start_urls没有默认功能了,所以要重新加上调用方法parse

   ![start_request2](https://static.oschina.net/uploads/img/201609/02170858_kQ4B.png "重写2")

4. (自作孽之)记得把settings.py中的 COOKIES_ENABLED = False 改为
COOKIES_ENABLED = True //默认为True

到此就可以正常爬取了,还有最后一个问题 输出中文乱码

### 解决中文乱码

这个我算是暴力解决了,在 tmailspider.py和pipelines.py 中加入

import sys reload(sys) sys.setdefaultencoding('utf-8')


然后输出变为unicode,于是在pipeline里加了 

line.decode('unicode-escape')


### 收尾工作(输出好看点以及实现爬取下一页)

由于单网页有多个item,于是我改写了爬虫的parse函数,可以单个输出,下图为改善版

![parse](https://static.oschina.net/uploads/img/201609/02173204_pBoq.png "parse改善版")

上面所完成的爬虫只能爬单个网页,那怎么够,于是又去分析网页内地址

![page](https://static.oschina.net/uploads/img/201609/02173600_DJbf.png "page-next")

可以看出网址很烦,一开始想用正则来表达网址,结果嫌麻烦放弃了,我看中了上图最后一条,下一页的网址,哈哈,用xpath分析获得很容易,于是最终版的parse函数如下

![parse最终](https://static.oschina.net/uploads/img/201609/02173930_AkMl.png "parse最终版")

转载于:https://my.oschina.net/jingzigege/blog/741705

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值