聯網是由一個個站點和網絡設備組成的大網,我們通過瀏覽器訪問站點,站點把HTML、JS、CSS代碼返回給瀏覽器,這些代碼經過瀏覽器解析、渲染,將豐富多彩的網頁呈現我們眼前。
網絡爬蟲,也叫網絡蜘蛛(Web Spider),如果把互聯網比喻成一個蜘蛛網,Spider就是一只在網上爬來爬去的蜘蛛。網絡爬蟲就是根據網頁的地址來尋找網頁的,也就是全球統一資源定位符URL,用來定義互聯網上一個唯一的資源 例如:一張圖片、一個文件、一段視頻都可以用url唯一確定。
1. 請求庫:requests,selenium(可以驅動瀏覽器解析渲染CSS和JS,但有性能劣勢(有用沒用的網頁都會加載))
2. 解析庫:正則,xpath,beautifulsoup,pyquery
3. 存儲庫:文件,MySQL,Mongodb,Redis
1. URL分析
我們首先打開淘寶聯盟網址,在搜索欄隨便輸入一件 商品,比如“鞋子”
2. 按F12可以查看訪問當前網頁發送的所有請求
現在發現沒東西,因為有的網站是動態加載的,當我們下拉滾動條時,看到有如下請求:
然后點擊下一頁,在 下面的請求:
通過分析這就是我們所要請求的URL。
3. 請求頭
User-agent:請求頭中如果沒有user-agent客戶端配置,服務端可能將你當做一個非法用戶host;
cookies:cookie用來保存登錄信息
注意: 一般做爬蟲都會加上請求頭
請求頭需要注意的參數:
(1)Referrer:訪問源至哪里來(一些大型網站,會通過Referrer 做防盜鏈策略;所有爬蟲也要注意模擬)
(2)User-Agent:訪問的瀏覽器(要加上否則會被當成爬蟲程序)
(3)cookie:請求頭注意攜帶
4、請求體
如果是get方式,請求體沒有內容 (get請求的請求體放在 url后面參數中,直接能看到)
如果是post方式,請求體是format data
ps:
1、登錄窗口,文件上傳等,信息都會被附加到請求體內
2、登錄,輸入錯誤的用戶名密碼,然后提交,就可以看到post,正確登錄后頁面通常會跳轉,無法捕捉到post
5、響應狀態碼
200:代表成功
301:代表跳轉
404:文件不存在
403:無權限訪問
502:服務器錯誤
我們通過不同的方式來分別請求并獲取響應,具體實現如下:
1.url請求,獲取響應的json數據,并將json數據轉換成dict 采用 urllib2 實現
#url請求,獲取響應的json數據,并將json數據轉換成dict 采用 urllib2 實現
def getJSONText(url):
try:
page=urllib2.urlopen(url)
data=page.read()
#print (data)
#print (type(data))
#dict_data=json.loads(data)
dict_data=demjson.decode(data)
#print dict_data
#print type(dict_data)
return dict_data
except:
return ""
2.#url請求,獲取響應的json數據,并將json數據轉換成dict 采用 添加請求頭、設置代理的方式 實現
#url請求,獲取響應的json數據,并將json數據轉換成dict 采用 添加請求頭、設置代理的方式 實現
def getJSONText2(url):
try:
proxies={
"http": "http://221.10.159.234:1337",
"https": "https://60.255.186.169:8888",
}
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
data=requests.get(url, headers=headers,proxies=proxies).text
print (data)
print (type(data))
# dict_data=json.loads(data)
dict_data=demjson.decode(data)
print dict_data
print type(dict_data)
return dict_data
except:
return ""
3.采用selenium實現
#url請求,獲取響應的json數據,并將json數據轉換成dict 采用selenium實現
def get_browser_text(url):
#browser=webdriver.Chrome(executable_path="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe")
browser=webdriver.Firefox(executable_path="C:\\Program Files (x86)\\Mozilla Firefox\\geckodriver.exe")
try:
browser.get(url)
print(browser.page_source)
browserdata=browser.page_source
browser.close()
# res=r'<a .*?>(.*?)</a>'
res=r'<pre .*?>(.*?)</pre>'
json_data=re.findall(res, browserdata, re.S | re.M)
print json_data
for value in json_data:
print value
dict_data=demjson.decode(json_data)
print 'dict_data:'
print dict_data
# print type(dict_data)
return dict_data
except:
return ""
4.
# 獲取單個商品的HTML代碼并用正則匹配出描述、服務、物流3項參數 采用urllib2
def getHTMLText(url):
try:
data=urllib2.urlopen(url).read()
res=r'<dd class="tb-rate-(.*?)"'
data_list=re.findall(res, data, re.S | re.M)
print type(data_list)
print data_list[0]
#for value in mm:
# print value
return data_list
except:
return ""
#coding=utf-8
__author__='yansong'
# 2018.07.12
# 抓取淘寶聯盟 比率>10 ,描述、服務、物流3項參數高于或持平于同行業的商品圖片。
import json
import demjson
import urllib2
import os
import time
import requests
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import sys
reload(sys)
sys.setdefaultencoding('utf8')
path_name=u'T恤寬松日系男款' #圖片保存的文件夾名稱
Myname=u'T恤寬松日系男款' #搜索關鍵字
# 創建文件夾
path=os.getcwd() # 獲取此腳本所在目錄
new_path=os.path.join(path,path_name)
if not os.path.isdir(new_path):
os.mkdir(new_path)
#url請求,獲取響應的json數據,并將json數據轉換成dict 采用selenium實現
def get_browser_text(url):
#browser=webdriver.Chrome(executable_path="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe")
browser=webdriver.Firefox(executable_path="C:\\Program Files (x86)\\Mozilla Firefox\\geckodriver.exe")
try:
browser.get(url)
print(browser.page_source)
browserdata=browser.page_source
browser.close()
# res=r'<a .*?>(.*?)</a>'
res=r'<pre .*?>(.*?)</pre>'
json_data=re.findall(res, browserdata, re.S | re.M)
print json_data
for value in json_data:
print value
dict_data=demjson.decode(json_data)
print 'dict_data:'
print dict_data
# print type(dict_data)
return dict_data
except:
return ""
#url請求,獲取響應的json數據,并將json數據轉換成dict 采用 urllib2 實現
def getJSONText(url):
try:
page=urllib2.urlopen(url)
data=page.read()
#print (data)
#print (type(data))
#dict_data=json.loads(data)
dict_data=demjson.decode(data)
#print dict_data
#print type(dict_data)
return dict_data
except:
return ""
# 獲取單個商品的HTML代碼并用正則匹配出描述、服務、物流3項參數 采用urllib2
def getHTMLText(url):
try:
data=urllib2.urlopen(url).read()
res=r'<dd class="tb-rate-(.*?)"'
data_list=re.findall(res, data, re.S | re.M)
print type(data_list)
print data_list[0]
#for value in mm:
# print value
return data_list
except:
return ""
#url請求,獲取響應的json數據,并將json數據轉換成dict 采用 添加請求頭、設置代理的方式 實現
def getJSONText2(url):
try:
proxies={
"http": "http://221.10.159.234:1337",
"https": "https://60.255.186.169:8888",
}
headers={'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
data=requests.get(url, headers=headers,proxies=proxies).text
print (data)
print (type(data))
# dict_data=json.loads(data)
dict_data=demjson.decode(data)
print dict_data
print type(dict_data)
return dict_data
except:
return ""
def getJSONText3(url):
try:
driver=webdriver.Chrome(executable_path="C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe")
driver.get(url) # 訪問淘寶寶貝頁面,獲取cookie
# driver.get(taobao_comment_url) # 直接訪問寶貝評論會被反爬蟲檢測到。上一步獲得cookie后可得到評論數據
print(driver.find_element_by_xpath('/html/body').text)
data=driver.find_element_by_xpath('/html/body').text
#data=requests.get(url, headers=headers,proxies=proxies).text
print (data)
print (type(data))
# dict_data=json.loads(data)
dict_data=demjson.decode(data)
print dict_data
print type(dict_data)
return dict_data
except:
return ""
def mytaobao_spider():
# 每一頁的url 循環抓取60頁
for page in range(0, 60):
url=(
'http://pub.alimama.com/items/search.json?q=%s&_t=1531556288035&toPage=%d&perPageSize=50&auctionTag=&shopTag=yxjh&t=1531556427336&_tb_token_=7e73deef30e18&pvid=10_117.136.70.61_599_1531556285246' % (
Myname, page))
# url=('http://pub.alimama.com/items/channel/qqhd.json?q=%s&channel=qqhd&_t=1531121449018&toPage=%d&perPageSize=50&shopTag=&t=1531125125414&_tb_token_=eeee6ee3be688&pvid=19_118.112.188.32_688_1531125125232'%(Myname,page))
# url=('http://pub.alimama.com/items/search.json?q=%E9%9E%8B%E5%AD%90&_t=1531368912715&auctionTag=&perPageSize=50&shopTag=yxjh&t=1531368913289&_tb_token_=e370663ebef17&pvid=10_118.112.188.32_9532_1531368912863')
print url
time.sleep(2) # 延時2秒,添加延時操作是因為淘寶有反爬蟲機制,過于頻繁的訪問IP可能會被限制
url_data=getJSONText(url)
# 一頁中每件商品的標簽信息
for i in range(0, 50):
time.sleep(1)
try:
# print type(url_data['data']['pageList'][i]['pictUrl'])
pictUrl=url_data['data']['pageList'][i]['pictUrl'] # 圖片url
sellerId=url_data['data']['pageList'][i]['sellerId'] # 商品id
auctionUrl=url_data['data']['pageList'][i]['auctionUrl'] # 淘寶鏈接
auctionId=url_data['data']['pageList'][i][
'auctionId'] # 淘寶鏈接='http://item.taobao.com/item.htm?id=%d'%(auctionId)
tkRate=url_data['data']['pageList'][i]['tkRate'] # 比率
zkPrice=url_data['data']['pageList'][i]['zkPrice'] # 價格
# 需要抓取比率大于10.00的商品信息
if tkRate > 10.00:
# time.sleep(1)
# print '詳細信息:'
# print type(tkRate)
# print type(zkPrice)
# print '比率:%f' % (tkRate)
# print '價格:%f' % (zkPrice)
# print sellerId
# print auctionId
# print pictUrl
# print auctionUrl # 淘寶鏈接
# print type(sellerId)
print auctionUrl
# 每件商品的子url (描述相符、發貨速度、服務態度 等信息)
# sub_url=('http://pub.alimama.com/pubauc/searchPromotionInfo.json?oriMemberId=%d&blockId=&t=1531369204612&_tb_token_=e370663ebef17&pvid=10_118.112.188.32_760_1531368931581' % (sellerId))
sub_url=auctionUrl # 每件商品的淘寶url
sub_url_data=getHTMLText(sub_url) # 獲取店鋪的 描述、服務、物流 信息
print type(sub_url_data)
print len(sub_url_data)
# 如果返回的是空字符串, 則說明沒有取到我們想要的字段,是因為淘寶有不同的頁面,對于這種頁面我們需要進一步分析下面的url
if (len(sub_url_data)==0):
info_url=('https://world.taobao.com/item/%d.htm' % (auctionId))
info_data=urllib2.urlopen(info_url).read()
res_info=r'<li class="([^s].*?)<img'
tmp_url_data=re.findall(res_info, info_data, re.S | re.M)
print "tmp_url_data:"
for value1 in tmp_url_data:
print value1
sub_url_data=[]
score_list=[x[0:4] for x in tmp_url_data] # 截取前面5位
print 'new_list:'
for score in score_list:
print score
if score=='down':
score='lower' # d第一種頁面與第二種頁面返回的店鋪評定信息不同,需轉換成統一的方便后面處理,將 down 轉換為 lower
sub_url_data.append(score)
print '替換后的list元素:'
for level_data in sub_url_data:
print level_data
# 如果3項評定參數都不是‘lower’ 就將圖片和相關信息抓取出來 任意一項參數為‘lower’都不符合要求
if ((not (sub_url_data[0]=='lower')) and (not (sub_url_data[1]=='lower')) and (
not (sub_url_data[2]=='lower'))):
# for value in sub_url_data:
# print value
mypictUrl='http:' + pictUrl # 圖片url
picture_content=urllib2.urlopen(mypictUrl).read()
picture_name=auctionUrl + '.jpg' # 拼接圖片名稱
print picture_name
time.sleep(1)
# 需要寫入文件的信息
spider_info='url:' + url + '\n' + ' sub_url:' + sub_url + '\n' + ' 淘寶鏈接:' + auctionUrl + '\n' + ' mypictUrl:' + mypictUrl + '\n\n'
try:
# 寫圖片
index_num=picture_name.index('id=')
with open(path_name + '/' + picture_name[index_num:], 'wb') as code:
code.write(picture_content)
# 寫URL信息
with open(path_name + '/' + 'spider.txt', 'a') as spider_code:
spider_code.write(spider_info)
except (IOError, ZeroDivisionError), e:
print e
print "Error: 沒有找到圖片文件或讀取文件失敗"
else:
print "圖片寫入成功"
time.sleep(1)
except (IndexError, KeyError, TypeError), e:
print e
print "每件商品信息讀取失敗"
else:
pass
# print "每件商品的標簽信息讀取成功"
if __name__=='__main__':
mytaobao_spider()
抓取的圖片在指定的目錄下:
同時寫了一個spider.txt文件,里面是詳細的URL信息:
單個商品的淘寶鏈接如:http://item.taobao.com/item.htm?id=566676904510
淘寶鏈接構成: http://item.taobao.com/item.htm?+id=566676904510 抓取的圖片名稱是以商品的id來命名的,我們根據圖片就可以快速找到該商品,該爬蟲抓取的都是 比率>10 ,描述、服務、物流3項參數高于或持平于同行業的商品,也可以根據自己需要,抓取價格、銷售量等符合自己要求的商品。
樣在微信上發淘寶商品鏈接?相信很多淘寶賣家都有過這樣的疑問,不過這個貌似都是2014年的話題了拖到現在好像沒什么特別的討論價值,但是淘寶商品如何有效精準的推廣到微信是一直賣家們比較關注的問題。其實就淘寶商品推廣到微信有很多優質的淘寶賣家在這方面很有心得,他們經常會在一些比較知名的行業論壇分享,到目前為止有很多的中小賣家紛紛效仿把淘寶流量分到微信上。淘寶鏈接分享到微信,目前比較常規的方法就是淘寶商品的分享按鈕,可以直接復制口令到微信,很方便。這里小編在這里再分享一個可以把淘寶圖文鏈接分享到微信的方法技巧:
第一步:打開百度網頁搜索:"甩手工具箱"并下載,登錄工具箱;
第二步:打開工具首頁,找到“推廣商品到微信”功能;
第三步:進入甩手工具箱常規的抓取頁面,有三種抓取方式供選擇;
第四步:以第一種抓取方式為例:點擊進入第一個店鋪,進入店鋪首頁,抓取整頁or整店商品;
第五步:選擇性抓取所需生成二維碼的商品,選擇下一步;
第六步:批量生成商品二維碼,通過掃描二維碼即可實現淘寶商品圖文鏈接快速分享到微信朋友圈。
通過上面六個步驟的操作即可完成”推廣商品到微信”的全過程,簡單總結就三個步驟:搜索-抓取-生成,可以用作商品二維碼,也可以實時分享到微信朋友圈。
很多賣家朋友通常是把店鋪流量通過返現或者打折等方式導流到微信圈子中,然后通過日常的維護,在合適的時間再導流回淘寶。也有的朋友,通過自己培養精準的微信朋友圈子,在微信上發淘寶商品鏈接導流到淘寶店鋪。所以在解決完"怎樣在微信上發淘寶商品鏈接"問題之后,需要把重心放在微信圈子的維護的工作上。
更多內容關注微信:450647316
寫在最前面※
【關于商品審核時間】
工作日
10:30之前提交審核的,11:00之前審完
15:00之前提交審核的,15:30之前審完
20:00之前提交審核的,20:30之前審完
周末/公共假期
20:00之前提交審核的,20:30之前審完
如果審核遇到問題,請將審核未通過的商品編號發到群里(如:6535408016756310200,可在商品管理中查看),我們會集中為大家處理。
商品前端展示與后臺錄入內容對照示例:
點擊“商品”—“創建商品”
支付方式:在線支付。目前小店僅支持這一種支付方式
商品URL:(此項選填)可填入淘寶/天貓(其他平臺暫不支持)商品鏈接后,點擊獲取寶貝詳情,自動獲取已有寶貝已有淘寶/天貓商品信息
-效果如圖【抓取后的信息請認真核對,如有順序顛倒、圖片未能正常抓取 請手動補充調整】
產品標題:準確簡潔的描述商品,如:不銹鋼真空保溫杯,長效保溫,支持驗貨
※如果是虛擬商品,請在標題寫清楚【線上發貨,無物流信息】
賣點:四個漢字(前端不展示)
商家推薦語:用一句話描述并推薦一下商品的優點,如:大分量雨前龍井茶 (前端不展示)
商品類目:請根據商品屬性選擇,可參考:類目對應表:https://shimo.im/sheet/AbmrMa54LOgps9qT。不同類目涉及的商品規格信息不同。
商品規格:請按實際情況填寫
價格:需不高于市場同類商品價格,并且在后續設置的訂單套餐價格范圍內
原價:不填
傭金比例:0
運費設置:運費默認為包郵,如果您設置運費的需求,請新建運費模板并選擇。
※如何新建運費模板?
1.選擇【運費設置】右邊的【新建運費模板】
或者進入【物流】-【運費模板】新建運費模板
2.設置模板名稱、寶貝地址
模板名稱:請根據需求隨意設置
寶貝地址:寶貝地址為商家發貨地址,請選擇商品上線后的實際發貨地
3.選擇計價方式
按件數計價:選擇按件數計價,填寫默認運費,如 1件10元,沒增加1件,增加運費2元。
按重量計價:選擇按件數計價,填寫默認運費,如 1kg10元,每增加1kg,增加運費2元。
4.設置指定地區運費
如果有些地區不采用默認運費,需要單獨設置。請點擊【為指定地區設置運費】,設置特定地區的運費規則。計價方式 與之前選擇的計價方式一致。
注意:此項不是必須設置,如統一運費規則,不需要設置此項。
5.點擊【提交】完成新增運費模板
主圖要求如下:
1.必須上傳5張圖片
2.圖片必須為正方形(長寬比1:1)簡易圖片裁剪教程:https://jingyan.baidu.com/article/cd4c29793d0a39756f6e6077.html
3.只支持png,jpg,jpeg三種格式的圖片
1.建議將詳情內容做成寬度為600的圖片后上傳,每張圖片大小最好控制在1M左右。只支持png,jpg,jpeg三種格式的圖片。如需上傳動圖,請先將圖片擴展名改為.jpg。
(修改方式:http://dwz.cn/7XOHP2)【請注意 一定要上傳圖片!文本形式的產品詳情嚴重影響轉化率,提交審核后會被駁回哦!】
2.詳情頁圖片中要說明商品規格重量、特點、優勢、使用方法、保質期等,從多角度盡量展示商品的全部細節。文字說明建議做成圖片,便于閱讀。
3.如無詳情,可將主圖圖片輔以文字說明制作成詳情圖片,合理排序后上傳。
↑這是個GIF↑
1.首先點擊“創建商品規格”
-規格名稱:可根據產品名稱填寫
-子規格名稱:可根據商品的規格類型填寫,如:顏色、套餐組合、圖案、瓶、盒等
-子規格選項:可填寫商品的具體規格內容,如:商品重量、商品數量、商品尺寸等
【子規格的數量。選項可根據實際情況增加減少】
設置完成后點擊確定
2.選擇已經保存的規格名稱,設置庫存價格商品編碼
商品編碼不展示給用戶,可自行設置
單價可以大于或者小于售價,但是必須有一個套餐價格與售價保持一致
庫存數量可設置較大數值,防止商品賣光庫存不足
正在售賣商品:已經提交審核正在線上售賣商品可以在這里查看
提交申請商品:已提交審核但仍在審核中的商品可以在這里查看
下架商品:已被下架商品可以在這里查看
封禁商品:違規被封禁處理的商品可以在這里查看
保存為提交商品:完成商品創建,點擊了【保存】的商品可以在這里查看,如需給保存商品提交審核 請點擊【修改商品】
回收站:已刪除商品可以在這里查看
商品所需相關資質,請查看:【特殊類目商家資質要求】 對照上傳。
了解禁止投放商品請查看:【頭條小店禁售商品管理規范】
*請認真填寫需求信息,我們會在24小時內與您取得聯系。