php 爬虫 超市,scrapy爬虫 爬取天猫进口零食网页
出于某些原因,想調戲下天貓的反爬蟲機制,于是就有了這篇記錄
源碼已傳osgit ,感興趣可以戳下
正文開始
分析目標(items) 解析路徑(xpath)
目標為天貓超市的進口商品區
研究一下待抓取網頁中, 需要爬的內容,如下圖
我的目標是 商品名、銷量、價格,圖當然也是可以爬的,不過本次不爬
新建爬蟲【處理items,pipelines,settings,spider】
首先新建一個爬蟲,起個喜歡或者任性的名字
scrapy startproject tmail
更改下級目錄中的 **items.py **
我依據網站上的起名添加了 titile,sold(sum是保留字),price
更改pipelines.py和settings.py中的內容(當然也可以先創小蜘蛛啦)
因為爬的都是字符,就直接保存為json文件(下圖為初版,后遇到問題有更改)
在setting.py中添加download_delay和 item_pipelines
DOWNLOAD_DELAY = 3
ITEM_PIPELINES = {
'tmail.pipelines.TmailPipeline' : 300,
}
事實上我還加了COOKIES_ENABLED = False,后來證明。。是傻,見后文
接下來就是愉快得整蜘蛛了
在spiders文件夾中新建一個xxx.py (我的是tmailspider.py),打開之
加 name(運行爬蟲時用) ,allowed_domains (域名),
start_url(必需吐槽下天貓的后綴在下個菜雞看不懂,并且用虛擬機開的不一樣,不過都能用就是了,我的 在圖中隱藏了部分,各位喜歡自己開個就好)
分析目標xpath,加parse方法 下圖為最初版
試運行,處理bug【robots.txt,更改useragent(無用),重定向302錯誤】
嗯 接下來 我就運行了 scrapy crawl tmail.com
結果如圖 我被robots.txt文件擋住了
看來不能優雅了,第一次更改 settings.py 中 加/改 ROBOTSTXT_OBEY = False
改完后,來我們看看結果
重定向302??這是什么鬼 ?看出我是用爬蟲了 ?
沒事,前兩天才學了改請求頭,我加個變化的useragent試試 (這個可以看看我的上一篇博客)
改useragent
然并卵,它報同樣!的!錯!
好吧,老實上網搜,
分析cookies
網上并沒有詳細方法,只有幾個朋友提供的分析cookies的思路
然而我并不會,于是就找到一篇對我接下來的修改起很大作用的文章 Scrapy用Cookie實現模擬登錄
方法如下:
登錄了自己的天貓,用ctrl + shift + i 快捷鍵打開工具,在network下找到需要的cookie(真 好長一串)
拿到cookie后需要處理成``` 'xxx' : 'xxxx',
2. 重載spider內方法start_requests(注意:此時start_urls已廢,我保留它僅為了保存原網址)

3. 中間是很長的cookies,因為start_urls沒有默認功能了,所以要重新加上調用方法parse

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函數,可以單個輸出,下圖為改善版

上面所完成的爬蟲只能爬單個網頁,那怎么夠,于是又去分析網頁內地址

可以看出網址很煩,一開始想用正則來表達網址,結果嫌麻煩放棄了,我看中了上圖最后一條,下一頁的網址,哈哈,用xpath分析獲得很容易,于是最終版的parse函數如下

總結
以上是生活随笔為你收集整理的php 爬虫 超市,scrapy爬虫 爬取天猫进口零食网页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jd脚本 v4-bot 镜像部署和配置b
- 下一篇: php同时接受get post,php中