日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python3淘宝商品目录_Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)...

發布時間:2024/3/26 python 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3淘宝商品目录_Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

大家好,今天我要來講講一個比較實用的爬蟲工具,抓取淘寶的關鍵字商品信息,即是:

輸入關鍵字,按照價格等排序,抓取列出的商品信息以及下載圖片,并且支持導出為Excel。

如果如下:

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

感覺自己萌萌噠~~

二、原理

大家知道什么叫爬蟲,它也叫網絡蜘蛛,機器人等,意思就是說自動的程序,可以去抓取使用網絡協議傳輸的內容。

目前來講爬蟲主要使用在抓網站,即使用Http協議傳輸的各種數據,如html,xml和json等,也包括圖片等二進制內容。

http協議主要有請求報文和響應報文,計算機網絡必須學好,網絡編程嘛!

發送一個請求報文給網站服務器,它就會回報一個響應報文,附帶一些數據。

請求報文,后面帶一堆頭部,可能會攜帶數據,如post或get的時候:

GET www.baidu.com HTTP/1.1

響應報文,后面帶頭部還有數據:

HTTP/1.1 200 OK

以下為火狐F12的結果,僅供參考!

我們只需正常進行http請求即可獲得數據,問題是淘寶會反爬蟲,或者是需要登錄。

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

2.可能會根據IP訪問次數,如一秒訪問100次則認為是機器人,比如豆瓣。本人抓過豆瓣大部分的書~存在數據庫了

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

由于本人更喜歡用手機玩淘寶,自然是抓手機淘寶的數據,因為也是HTML原生的,所以抓的數據應該是PC端一樣妥妥的!

三、思路

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

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

四、代碼

因為代碼較長,下面先按層次逐步講解,請保存耐心!

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

1.導入相應模塊

# -*- coding:utf-8 -*-

import urllib.request, urllib.parse, http.cookiejar

import os, time,re

import http.cookies

import xlsxwriter as wx # 需安裝,EXCEL強大庫

from PIL import Image # 需安裝,圖片壓縮截取庫

import pymysql # 需安裝,mysql數據庫操作庫

import socket

import json

安裝模塊請使用

pip3 install *

如:pip3 install xlsxwriter

下載對應版本:

然后打開cmd,轉到該文件目錄,使用:

妥妥的,自行安裝哈,有問題咨詢我!

核心代碼如下:

def getHtml(url,daili='',postdata={}):

"""

抓取網頁:支持cookie

第一個參數為網址,第二個為POST的數據

"""

# COOKIE文件保存路徑

filename = 'cookie.txt'

# 聲明一個MozillaCookieJar對象實例保存在文件中

cj = http.cookiejar.MozillaCookieJar(filename)

# cj =http.cookiejar.LWPCookieJar(filename)

# 從文件中讀取cookie內容到變量

# ignore_discard的意思是即使cookies將被丟棄也將它保存下來

# ignore_expires的意思是如果在該文件中 cookies已經存在,則覆蓋原文件寫

# 如果存在,則讀取主要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='ddd'

# 建造帶有COOKIE處理器的打開專家

proxy_support = urllib.request.ProxyHandler({'http':'http://'+daili})

# 開啟代理支持

if daili:

print('代理:'+daili+'啟動')

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)

# 有數據需要POST

if postdata:

# 數據URL編碼

postdata = urllib.parse.urlencode(postdata)

# 抓取網頁

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

這是萬能的抓取代碼,要代理有代理,要Post數據有數據,還有Cookie保存機制,外部cookie引用。

頭部偽裝成手機端,妥妥的!!

下面拆分講解:

filename = 'cookie.txt'

# 聲明一個MozillaCookieJar對象實例保存在文件中

cj = http.cookiejar.MozillaCookieJar(filename)

上述語句表明,訪問網站后cookie保存在cookie.txt中,程序運行后如圖

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

# 從文件中讀取cookie內容到變量

# ignore_discard的意思是即使cookies將被丟棄也將它保存下來

# ignore_expires的意思是如果在該文件中 cookies已經存在,則覆蓋原文件寫

# 如果存在,則讀取主要COOKIE

if os.path.exists(filename):

cj.load(filename, ignore_discard=True, ignore_expires=True)

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

然而并沒有什么卵用,淘寶會加密,Cookie沒那么簡單。生成的Cookie不夠用!

因為有時淘寶需要登錄,登陸產生的密碼好變態,所以不管,用簡單粗暴的方法。

登陸后在瀏覽器上按F12,點擊網絡,然后在地址欄輸入:

如下圖,復制Cookie。

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

因為JSESSIONID已經自動生成了,需要上面的其他頭部。下面是subcookie.txt內容,好丑!

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

其實有時是不用到subcookie.txt的,有時卻需要用到,有效期很長,幾個星期!

# 讀取其他COOKIE

if os.path.exists('../subcookie.txt'):

cookie = open('../subcookie.txt', 'r').read()

else:

cookie='ddd'

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

# 建造帶有COOKIE處理器的打開專家

proxy_support = urllib.request.ProxyHandler({'http':'http://'+daili})

# 開啟代理支持

if daili:

print('代理:'+daili+'啟動')

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是開啟人的意思,他就是我!!

# 打開專家加頭部

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頭部沒有,我們的subcookie派上用場了,而且我們偽裝成iPad!

# 分配專家

urllib.request.install_opener(opener)

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

# 有數據需要POST

if postdata:

# 數據URL編碼

postdata = urllib.parse.urlencode(postdata)

# 抓取網頁

html_bytes = urllib.request.urlopen(url, postdata.encode()).read()

else:

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

如果有數據要POST,那么先urlencode一下,因為有些規定一些字符不能出現在url里面,所以要轉義,把漢字轉成%*,如果某天你post數據的時候一直出錯,那么你要考慮是否url里面是否有非法字符,請百度base64原理!!!

轉義后直接

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

打開url鏈接,然后讀取,讀的是二進制喔!!

# 保存COOKIE到文件中

cj.save(ignore_discard=True, ignore_expires=True)

return html_bytes

最后把生成的cookie保存起來,返回抓取的數據。

這就是我們第一個核心函數代碼,后面還有很多個喔!

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

等不及,請github武裝!!!

總結

以上是生活随笔為你收集整理的python3淘宝商品目录_Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。