成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python3中級(jí)玩家:淘寶天貓商品搜索爬蟲自動(dòng)化工具(第一篇)

oliverhuang / 1954人閱讀

摘要:這就是我們第一個(gè)核心函數(shù)代碼,后面還有很多個(gè)喔明天待續(xù)中級(jí)玩家淘寶天貓商品搜索爬蟲自動(dòng)化工具第二篇等不及,請(qǐng)武裝

查看·Github

使用Golang重構(gòu)PC版本搜索框:https://github.com/hunterhug/...

一、前言

大家好,今天我要來(lái)講講一個(gè)比較實(shí)用的爬蟲工具,抓取淘寶的關(guān)鍵字商品信息,即是:

輸入關(guān)鍵字,按照價(jià)格等排序,抓取列出的商品信息以及下載圖片,并且支持導(dǎo)出為Excel。

如果如下:

看完下面的講解,Python語(yǔ)言就掌握得差不多,中級(jí)水平了,而且這個(gè)封裝后的工具還是很好用的。

感覺自己萌萌噠~~

二、原理

大家知道什么叫爬蟲,它也叫網(wǎng)絡(luò)蜘蛛,機(jī)器人等,意思就是說(shuō)自動(dòng)的程序,可以去抓取使用網(wǎng)絡(luò)協(xié)議傳輸?shù)膬?nèi)容。

目前來(lái)講爬蟲主要使用在抓網(wǎng)站,即使用Http協(xié)議傳輸?shù)母鞣N數(shù)據(jù),如html,xml和json等,也包括圖片等二進(jìn)制內(nèi)容。

http協(xié)議主要有請(qǐng)求報(bào)文和響應(yīng)報(bào)文,計(jì)算機(jī)網(wǎng)絡(luò)必須學(xué)好,網(wǎng)絡(luò)編程嘛!

發(fā)送一個(gè)請(qǐng)求報(bào)文給網(wǎng)站服務(wù)器,它就會(huì)回報(bào)一個(gè)響應(yīng)報(bào)文,附帶一些數(shù)據(jù)。

請(qǐng)求報(bào)文,后面帶一堆頭部,可能會(huì)攜帶數(shù)據(jù),如post或get的時(shí)候:

GET www.baidu.com HTTP/1.1

響應(yīng)報(bào)文,后面帶頭部還有數(shù)據(jù):

HTTP/1.1 200 OK

以下為火狐F12的結(jié)果,僅供參考!

正在翻譯:http://www.kancloud.cn/yizhin...

我們只需正常進(jìn)行http請(qǐng)求即可獲得數(shù)據(jù),問(wèn)題是淘寶會(huì)反爬蟲,或者是需要登錄。

1.一般反爬蟲會(huì)在頭部做點(diǎn)手腳,加密一些頭部,如防盜鏈有個(gè)Referer,如果不是本服務(wù)器則拒絕提供服務(wù)。而Session傳送的Cookie一般以jsessionid這種頭部存在。。。。

2.可能會(huì)根據(jù)IP訪問(wèn)次數(shù),如一秒訪問(wèn)100次則認(rèn)為是機(jī)器人,比如豆瓣。本人抓過(guò)豆瓣大部分的書~存在數(shù)據(jù)庫(kù)了

解決方法:自然是偽裝成人類,暫停,換IP,登錄,完美??!

由于本人更喜歡用手機(jī)玩淘寶,自然是抓手機(jī)淘寶的數(shù)據(jù),因?yàn)橐彩荋TML原生的,所以抓的數(shù)據(jù)應(yīng)該是PC端一樣妥妥的!

三、思路

先根據(jù)F12調(diào)試后,確定鏈接地址,偽裝頭部,偽裝查詢條件,非常情況使用外部Cookie文件,得到JSONP數(shù)據(jù),替換成JSON數(shù)據(jù),抽取JSON數(shù)據(jù),

提取圖片鏈接,更改圖片尺寸,抓取大圖片,圖片壓縮,數(shù)據(jù)選擇填入EXCEL,生成EXCEL,KO!

四、代碼

因?yàn)榇a較長(zhǎng),下面先按層次逐步講解,請(qǐng)保存耐心!

使用Python3.4,下面為文件層次截圖,部分未截。

1.導(dǎo)入相應(yīng)模塊

# -*- coding:utf-8 -*-
import urllib.request, urllib.parse, http.cookiejar 
import os, time,re
import http.cookies
import xlsxwriter as wx  # 需安裝,EXCEL強(qiáng)大庫(kù)
from PIL import Image # 需安裝,圖片壓縮截取庫(kù)
import pymysql # 需安裝,mysql數(shù)據(jù)庫(kù)操作庫(kù)
import socket
import json

安裝模塊請(qǐng)使用

pip3 install *

如:pip3 install xlsxwriter

或者從萬(wàn)能倉(cāng)庫(kù) http://www.lfd.uci.edu/~gohlk...

下載對(duì)應(yīng)版本:

然后打開cmd,轉(zhuǎn)到該文件目錄,使用:

妥妥的,自行安裝哈,有問(wèn)題咨詢我!

核心代碼如下:

def getHtml(url,daili="",postdata={}):
    """
    抓取網(wǎng)頁(yè):支持cookie
    第一個(gè)參數(shù)為網(wǎng)址,第二個(gè)為POST的數(shù)據(jù)

    """
    # COOKIE文件保存路徑
    filename = "cookie.txt"

    # 聲明一個(gè)MozillaCookieJar對(duì)象實(shí)例保存在文件中
    cj = http.cookiejar.MozillaCookieJar(filename)
    # cj =http.cookiejar.LWPCookieJar(filename)

    # 從文件中讀取cookie內(nèi)容到變量
    # ignore_discard的意思是即使cookies將被丟棄也將它保存下來(lái)
    # ignore_expires的意思是如果在該文件中 cookies已經(jīng)存在,則覆蓋原文件寫
    # 如果存在,則讀取主要COOKIE
    if os.path.exists(filename):
        cj.load(filename, ignore_discard=True, ignore_expires=True)
    # 讀取其他COOKIE
    if os.path.exists("../subcookie.txt"):
        cookie = open("../subcookie.txt", "r").read()
    else:
        cookie="ffffd"
    # 建造帶有COOKIE處理器的打開專家
    proxy_support = urllib.request.ProxyHandler({"http":"http://"+daili})
    # 開啟代理支持
    if daili:
        print("代理:"+daili+"啟動(dòng)")
        opener = urllib.request.build_opener(proxy_support, urllib.request.HTTPCookieProcessor(cj), urllib.request.HTTPHandler)
    else:
        opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))

    # 打開專家加頭部
    opener.addheaders = [("User-Agent",
                          "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"),
                         ("Referer",
                          "http://s.m.taobao.com"),
                         ("Host", "h5.m.taobao.com"),
                         ("Cookie",cookie)]

    # 分配專家
    urllib.request.install_opener(opener)
    # 有數(shù)據(jù)需要POST
    if postdata:
        # 數(shù)據(jù)URL編碼
        postdata = urllib.parse.urlencode(postdata)

        # 抓取網(wǎng)頁(yè)
        html_bytes = urllib.request.urlopen(url, postdata.encode()).read()
    else:
        html_bytes = urllib.request.urlopen(url).read()

    # 保存COOKIE到文件中
    cj.save(ignore_discard=True, ignore_expires=True)
    return html_bytes

這是萬(wàn)能的抓取代碼,要代理有代理,要Post數(shù)據(jù)有數(shù)據(jù),還有Cookie保存機(jī)制,外部cookie引用。

頭部偽裝成手機(jī)端,妥妥的?。?/p>

下面拆分講解:

filename = "cookie.txt"

# 聲明一個(gè)MozillaCookieJar對(duì)象實(shí)例保存在文件中
cj = http.cookiejar.MozillaCookieJar(filename)

上述語(yǔ)句表明,訪問(wèn)網(wǎng)站后cookie保存在cookie.txt中,程序運(yùn)行后如圖

由于每次生成cookie.txt后需要重新使用

# 從文件中讀取cookie內(nèi)容到變量
# ignore_discard的意思是即使cookies將被丟棄也將它保存下來(lái)
# ignore_expires的意思是如果在該文件中 cookies已經(jīng)存在,則覆蓋原文件寫
# 如果存在,則讀取主要COOKIE
if os.path.exists(filename):
    cj.load(filename, ignore_discard=True, ignore_expires=True)

所以如果存在cookie.txt就加載進(jìn)去,作為頭部。

然而并沒(méi)有什么卵用,淘寶會(huì)加密,Cookie沒(méi)那么簡(jiǎn)單。生成的Cookie不夠用!

因?yàn)橛袝r(shí)淘寶需要登錄,登陸產(chǎn)生的密碼好{{BANNED}},所以不管,用簡(jiǎn)單粗暴的方法。

登陸:http://s.m.taobao.com/h5entry

登陸后在瀏覽器上按F12,點(diǎn)擊網(wǎng)絡(luò),然后在地址欄輸入:

http://s.m.taobao.com/search?...

如下圖,復(fù)制Cookie。

將復(fù)制的Cookie粘貼到subcookie.txt文件中,最后一行這一部分去掉。

因?yàn)镴SESSIONID已經(jīng)自動(dòng)生成了,需要上面的其他頭部。下面是subcookie.txt內(nèi)容,好丑!

thw=cn; isg=A7A89D9621A9A068A783550E83F9EA75; l=ApqaMO0Erj-EZWH3j8agZ1OFylq8yx6l; cna=Hu3jDrynL3MCATsp1roB7XpN
; t=55aa84049f7d4d13fd9d35f615eca657; uc3=nk2=odrVGF%2FSsTE%3D&id2=UonciKb8CbgV7g%3D%3D&vt3=F8dAScLyUuy4Y2y
%2BLsc%3D&lg2=W5iHLLyFOGW7aA%3D%3D; hng=CN%7Czh-cn%7CCNY; tracknick=%5Cu843D%5Cu7FCE%5Cu4E4B%5Cu5C18
; _cc_=VT5L2FSpdA%3D%3D; tg=0; x=e%3D1%26p%3D*%26s%3D0%26c%3D0%26f%3D0%26g%3D0%26t%3D0%26__ll%3D-1%26_ato
%3D0; ali_ab=59.41.214.186.1448953885940.9; miid=7373684866201455773; lzstat_uv=5949133953778742363|2144678
@2981197; lgc=%5Cu843D%5Cu7FCE%5Cu4E4B%5Cu5C18; _m_h5_tk=1e74de0ae376f631a8496c95c76f5992_1450410384099
; _m_h5_tk_enc=dd07257232a80053507709abdb5c25ba; WAPFDFDTGFG=%2B4dRjM5djSecKyo4JwyfmJ2Wk7iKyBzheenYyV7Q4jpJ5AGWi
%2BQ%3D; ockeqeudmj=jJryFc8%3D; _w_tb_nick=%E8%90%BD%E7%BF%8E%E4%B9%8B%E5%B0%98; imewweoriw=3%2Fsult5sjvHeH4Vx
%2FRjBTLvgKiaerF3AknLfbEF%2Fk%2BQ%3D; munb=1871095946; _w_app_lg=18; _w_al_f=1; v=0; cookie2=1c990a2699863063b5429a793eb3a06d
; uc1=cookie14=UoWyjiifHcHNvg%3D%3D&cookie21=URm48syIYB3rzvI4Dim4&cookie15=VT5L2FSpMGV7TQ%3D%3D; mt=ci
=-1_0; _tb_token_=QPkhOWpqBYou; wud=wud; supportWebp=false; sg=%E5%B0%986c; cookie1=URseavpIenqQgSuh1bZ8BwEFNWDY3M88T0
%2BWawaafIY%3D; ntm=0; unb=1871095946; _l_g_=Ug%3D%3D; _nk_=%5Cu843D%5Cu7FCE%5Cu4E4B%5Cu5C18; cookie17
=UonciKb8CbgV7g%3D%3D

其實(shí)有時(shí)是不用到subcookie.txt的,有時(shí)卻需要用到,有效期很長(zhǎng),幾個(gè)星期!

# 讀取其他COOKIE
    if os.path.exists("../subcookie.txt"):
        cookie = open("../subcookie.txt", "r").read()
    else:
        cookie="ffffd"

如果存在subcookie.txt,則讀進(jìn)去,否則就寫亂七八糟,感覺么么噠

# 建造帶有COOKIE處理器的打開專家
    proxy_support = urllib.request.ProxyHandler({"http":"http://"+daili})
    # 開啟代理支持
    if daili:
        print("代理:"+daili+"啟動(dòng)")
        opener = urllib.request.build_opener(proxy_support, urllib.request.HTTPCookieProcessor(cj), urllib.request.HTTPHandler)
    else:
        opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))

構(gòu)建代理專家,如果存在代理,那么就加入支持,沒(méi)有就算了,opener是開啟人的意思,他就是我??!

# 打開專家加頭部
opener.addheaders = [("User-Agent",
                      "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5"),
                     ("Referer",
                      "http://s.m.taobao.com"),
                     ("Host", "h5.m.taobao.com"),
                     ("Cookie",cookie)]

開始偽裝,看到Cookie頭部沒(méi)有,我們的subcookie派上用場(chǎng)了,而且我們偽裝成iPad!

# 分配專家
urllib.request.install_opener(opener)

將我安裝到全局請(qǐng)求里面,上面這樣做就是全局咯,一旦urlopen,就直接把所有頭部發(fā)出去了~~~

# 有數(shù)據(jù)需要POST
if postdata:
    # 數(shù)據(jù)URL編碼
    postdata = urllib.parse.urlencode(postdata)

    # 抓取網(wǎng)頁(yè)
    html_bytes = urllib.request.urlopen(url, postdata.encode()).read()
else:
    html_bytes = urllib.request.urlopen(url).read()

如果有數(shù)據(jù)要POST,那么先urlencode一下,因?yàn)橛行┮?guī)定一些字符不能出現(xiàn)在url里面,所以要轉(zhuǎn)義,把漢字轉(zhuǎn)成%*,如果某天你post數(shù)據(jù)的時(shí)候一直出錯(cuò),那么你要考慮是否url里面是否有非法字符,請(qǐng)百度base64原理?。。?/p>

轉(zhuǎn)義后直接

html_bytes = urllib.request.urlopen(url).read()

打開url鏈接,然后讀取,讀的是二進(jìn)制喔!!

# 保存COOKIE到文件中
cj.save(ignore_discard=True, ignore_expires=True)
return html_bytes

最后把生成的cookie保存起來(lái),返回抓取的數(shù)據(jù)。

這就是我們第一個(gè)核心函數(shù)代碼,后面還有很多個(gè)喔!

明天待續(xù):Python3中級(jí)玩家:淘寶天貓商品搜索爬蟲自動(dòng)化工具(第二篇)

等不及,請(qǐng)github武裝!??!

git clone https://github.com/hunterhug/taobaoscrapy.git

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/40736.html

相關(guān)文章

  • selenium跳過(guò)webdriver檢測(cè)并爬取天貓商品數(shù)據(jù)

    摘要:簡(jiǎn)介現(xiàn)在爬取淘寶,天貓商品數(shù)據(jù)都是需要首先進(jìn)行登錄的。把關(guān)鍵點(diǎn)放在如何爬取天貓商品數(shù)據(jù)上。是一款優(yōu)秀的自動(dòng)化測(cè)試工具,所以現(xiàn)在采用進(jìn)行半自動(dòng)化爬取數(shù)據(jù)。以開頭的在中表示類名,以開頭的在中表示名。 簡(jiǎn)介 現(xiàn)在爬取淘寶,天貓商品數(shù)據(jù)都是需要首先進(jìn)行登錄的。上一節(jié)我們已經(jīng)完成了模擬登錄淘寶的步驟,所以在此不詳細(xì)講如何模擬登錄淘寶。把關(guān)鍵點(diǎn)放在如何爬取天貓商品數(shù)據(jù)上。 過(guò)去我曾經(jīng)使用get/p...

    codecook 評(píng)論0 收藏0
  • API例子:用Python驅(qū)動(dòng)Firefox采集網(wǎng)頁(yè)數(shù)據(jù)

    摘要:開源即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目將與基于的異步網(wǎng)絡(luò)框架集成,所以本例將使用采集淘寶這種含有大量代碼的網(wǎng)頁(yè)數(shù)據(jù),但是要注意本例一個(gè)嚴(yán)重缺陷用加載網(wǎng)頁(yè)的過(guò)程發(fā)生在中,破壞了的架構(gòu)原則。 showImg(https://segmentfault.com/img/bVyzAX); 1,引言 本文講解怎樣用Python驅(qū)動(dòng)Firefox瀏覽器寫一個(gè)簡(jiǎn)易的網(wǎng)頁(yè)數(shù)據(jù)采集器。開源Python即時(shí)網(wǎng)絡(luò)爬蟲項(xiàng)目將與S...

    Harriet666 評(píng)論0 收藏0
  • Python網(wǎng)頁(yè)信息采集:使用PhantomJS采集淘寶天貓商品內(nèi)容

    摘要:,引言最近一直在看爬蟲框架,并嘗試使用框架寫一個(gè)可以實(shí)現(xiàn)網(wǎng)頁(yè)信息采集的簡(jiǎn)單的小程序。本文主要介紹如何使用結(jié)合采集天貓商品內(nèi)容,文中自定義了一個(gè),用來(lái)采集需要加載的動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容。 showImg(https://segmentfault.com/img/bVyMnP); 1,引言 最近一直在看Scrapy 爬蟲框架,并嘗試使用Scrapy框架寫一個(gè)可以實(shí)現(xiàn)網(wǎng)頁(yè)信息采集的簡(jiǎn)單的小程序。嘗試...

    z2xy 評(píng)論0 收藏0
  • python

    Python裝飾器為什么難理解? 無(wú)論項(xiàng)目中還是面試都離不開裝飾器話題,裝飾器的強(qiáng)大在于它能夠在不修改原有業(yè)務(wù)邏輯的情況下對(duì)代碼進(jìn)行擴(kuò)展,權(quán)限校驗(yàn)、用戶認(rèn)證、日志記錄、性能測(cè)試、事務(wù)處理、緩存等都是裝飾器的絕佳應(yīng)用場(chǎng)景,它能夠最大程度地對(duì)代碼進(jìn)行復(fù)用。 但為什么初學(xué)者對(duì)裝飾器的理解如此困難,我認(rèn)為本質(zhì)上是對(duì)Py… Python 實(shí)現(xiàn)車牌定位及分割 作者用 Python 實(shí)現(xiàn)車牌定位及分割的實(shí)踐。 ...

    chenatu 評(píng)論0 收藏0
  • 首次公開,整理12年積累的博客收藏夾,零距離展示《收藏夾吃灰》系列博客

    摘要:時(shí)間永遠(yuǎn)都過(guò)得那么快,一晃從年注冊(cè),到現(xiàn)在已經(jīng)過(guò)去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...

    Harriet666 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<