環境:python3.6
目的:根據關鍵詞在淘寶1688平臺上搜索商品,并將商品的pid等資訊抓取下來,
首先,我們打開首頁,輸入關鍵詞:女裝,↓↓↓
很多人學習python,不知道從何學起,
很多人學習python,掌握了基本語法過后,不知道在哪里尋找案例上手,
很多已經做案例的人,卻不知道如何去學習更加高深的知識,
那么針對這三類人,我給大家提供一個好的學習平臺,免費領取視頻教程,電子書籍,以及課程的源代碼!??¤
QQ群:623406465
點擊找一下,后會跳轉到商品頁面,如下圖所示↓↓↓
這個時候我們就可以看到女裝商品分類,和一些推薦商品,
接下來我們不要急著爬這些商品資料,我們要找的是這些商品的分類目錄地址,
谷歌瀏覽器右擊檢查頁面,仔細觀察會發現,每個分類的商品都有對應的地址,例如:連衣裙,對應的地址如下
我們進入連衣裙的href標簽里面的地址,你會發現頁面的標題已經從“女裝”變成“女裝-連衣裙”了,因為我們在這個頁面看到的商品是經過淘寶分類后的,這一頁內容只包含“女裝-連衣裙”,
通過抓包 我們發現,發現這一頁的真實的資料來源地址是:
https://s.1688.com/selloffer/rpc_async_render.jsonp?cps=1&n=y&filtOfferTags=279874&filt=y&keywords=%C5%AE%D7%B0&&categoryId=0&n=y&uniqfield=pic_tag_id&templateConfigName=marketOfferresult&pageSize=60&asyncCount=60&async=true&enableAsync=true&rpcflag=new&_pageName_=market&callback=jQuery172015741463935213496_1555383468519&beginPage=1
聯系背景關系,仔細觀察會發現,這是一個可以拼接的url,大致拼接方式如下:???
url = 'https://s.1688.com/selloffer/rpc_async_render.jsonp?cps=1&n=y&filtOfferTags=279874&filt=y&keywords='+keywords+'&categoryId='+categoryId+'&n=y&uniqfield=pic_tag_id&templateConfigName=marketOfferresult&pageSize=60&asyncCount=60&async=true&enableAsync=true&rpcflag=new&_pageName_=market&callback=jQuery172015741463935213496_1555383468519&beginPage='+str(i)
其中keywords不難看出是關鍵詞,而且是進行url編碼后的,而 i 這個明顯是頁碼數字,categoryId英語好的一眼就知道是“類別ID”
這些引數是從哪來的呢?
回到前面,我們進入“女裝-連衣裙”的頁面,并查看原始碼,搜索這些關鍵詞,
找到了:
接下來的事 就簡單了,通過填引數拼接url,我們隨意可以從女裝-連衣裙分類下,獲取幾十頁資料資訊,或者從女裝-日韓女裝分類下獲取資料資訊,然后通過正則匹配到商品offerid,???
這些offerid代表的就是商品id,例如取出其中一個offerid:556983465623,那么這個商品的完整地址就是:
https://detail.1688.com/offer/556983465623.html
商品的名稱、價格、銷量、大小引數都可以從這個地址獲取到,
下一篇我會教大家如何根據offerid抓取商品詳情,
本篇完整代碼如下:
???
# encoding: utf-8 """ 本腳本 用于根據關鍵詞“女裝”爬取1688全部分類商品的offerid """ import requests import re import random from lxml import html import time """獲取頁面內容""" def get_html(url): html='' for x in range(5): try: resp = requests.get(url) html = resp.text if len(html) < 1000: continue else: return html except Exception as e: print('url {0}, throw exception: {1}'.format(url, e)) html = '' return html """從女裝首頁獲取全部的分類地址""" def category_spider(): # 女裝:%C5%AE%D7%B0 url = 'https://s.1688.com/selloffer/offer_search.htm?keywords=%C5%AE%D7%B0&button_click=top&earseDirect=false&n=y&netType=1%2C11' htmlstr = get_html(url) section = html.fromstring(htmlstr) links = section.xpath("//div[@class='s-widget-flatcat sm-widget-row sm-sn-items-control sm-sn-items-count-d fd-clr']/div[@class='sm-widget-items fd-clr']/ul//a/@href") return links """從資料源中正則匹配商品的offerid""" def spider(url): pid_list = list() htmlstr = get_html(url) goods_pid = re.findall(r'offerid=.*?(\d+)', htmlstr) for pid in goods_pid: pid_list.append(pid) return pid_list def main(): # 獲取女裝商品下的所有分類目錄地址:連衣裙、女式T恤、短袖T恤、外貿裙、日韓女裝等等 links = category_spider() # 遍歷所有分類 for link in links: sound = get_html(link) # 類別ID categoryId = re.findall(r'"categoryId":"(\d+)"', sound)[0] # 關鍵詞 keywords = re.findall(r'"keywordsGbk":"(.*?)"', sound)[0] # 每個類別商品,取10頁資料 for i in range(1, 10): url = 'https://s.1688.com/selloffer/rpc_async_render.jsonp?cps=1&n=y&filtOfferTags=279874&filt=y&keywords='+keywords+'&categoryId='+categoryId+'&n=y&uniqfield=pic_tag_id&templateConfigName=marketOfferresult&pageSize=60&asyncCount=60&async=true&enableAsync=true&rpcflag=new&_pageName_=market&callback=jQuery172015741463935213496_1555383468519&beginPage='+str(i) pid_list = spider(url) print(pid_list) time.sleep(random.randint(1, 3)) if __name__ == '__main__': main()
代碼輸出結果展示:
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/188894.html
標籤:其他
下一篇:微信小程式的基礎入門知識點
