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

歡迎訪問 生活随笔!

生活随笔

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

python

利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

發布時間:2025/3/15 python 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據挖掘入門與實戰 公眾號: datadw

本文講述如何利用Python模擬淘寶的搜索過程并對搜索結果進行初步的數據可視化分析。

搜索過程的模擬:淘寶的搜索頁面有兩種形式,

一種形式是,

2019/20190426A/F0120242

一種形式是。

2019/20190426A/F0120243

初步數據可視化分析:對搜索回來的數據,通過店鋪城市生成坐標數據,并將銷量、售價在地圖上標示出來。坐標數據的獲得要通過,

2019/20190426A/F0120245

數據可視化為利用Plotly生成Buble Map

https://plot.ly/python/bubble-maps/

利用Python模擬搜索過程

首先需要先對淘寶的模式進行標識,通過幾個關鍵詞搜索之后,可以發現其地址的變化規律,如下圖所示:

淘寶搜索脫皮綠豆試試

忽略掉q=脫皮綠豆后面的部分試試,在網址欄輸入() ,發現可行。這樣就簡單了,后續就是解析生成頁、生成翻頁器、以及存儲生成數據即可。

解析生成頁

和之前的例子類似,結合requests以及BeautifulSoup來完成頁面數據下載:

def mainPaser(url): Headers = { “User-Agent”: “Mozilla/5.0 (Windows NT 6.3; Win64; x64)

AppleWebKit/537.36 (KHTML, like Gecko)

Chrome/37.0.2049.0 Safari/537.36″} Response = requests. get(url, headers=Headers) Interial = BeautifulSoup(Response.content, ‘lxml’) pageConfig = Interial. find( ”, text=re.compile( ‘g_page_config’))

returnpageConfig. string繼續對淘寶的頁面進行Inspect,發現每一框的店鋪數據儲存在g_page_config中的auctions中,并且g_page_config中的數據為json格式。

淘寶搜索頁面

g_page_config以及auctions

獲取原始數據

在Python中,可以通過專門的解析器來完成。通過其中的loads 和dumps 可以輕易的在json以及str之間做轉換。將str轉換為json格式,在通過pandas 的獲取json中的數據信息。

每一框店鋪的數據涵括非常豐富的店鋪信息以及銷售信息,在這里僅收集寶貝分類(category)、評論數(comment_count)、寶貝位置(item_loc)、店鋪名稱(nick)、寶貝名稱(raw_title)、原價格(reserve_price)、顯示價格(view_price)、銷量(view_sales)進行分析:

neededColumns= [ ‘category’, ‘comment_count’, ‘item_loc’, ‘nick’,

‘raw_title’, ‘reserve_price’, ‘view_price’, ‘view_sales’]

PageConfig= re.search(r ‘g_page_config = (.*?);n’,

pageConfig.string)

pageConfigJson= json.loads(gPageConfig.group( 1))

pageItems= pageConfigJson[ ‘mods’][ ‘itemlist’][ ‘data’][ ‘auctions’]

pageItemsJson= json.dumps(pageItems)

pageData= pd.read_json(pageItemsJson)

neededData= pageData[Paser.neededColumns]

整理生成數據

接下來就是對得出的數據進行整理,我們先看看neededData的結構是如何,如下表所示:

neededData

其中item_loc是網店的地址,可以看到直轄市是比較特殊的存在,將這一列改的省份名稱刪掉,方法是單獨將這一列拿出來通過

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.split.html

來處理,以空格為標識符,將該列的省份以及城市拆分為兩列,結果如下圖,通過

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html

向左填充對None進行填充:

fillna前

fillna后

這樣就實現對item_loc列的修改,看回neededData那張圖,最后一列view_sales中,需要將每個單元格中付款兩個字刪去。需要采用,

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.extract.html

結合正則表達式來處理。將數字文本拖出來之后,還需要通過

函數將其轉化為int格式,并增加時間列。最后該段數據整理的代碼,以及處理后的效果圖為:

cityData = neededData[ ‘item_loc’] .str.split( ‘ ‘, expand = True)cityData.fillna(method = ‘pad’, axis= 1, inplace= True)neededData .loc[:,( ‘item_loc’)] = cityData[ 1]neededData .loc[:,( ‘view_sales’)] = neededData[ ‘view_sales’] .str.extract( ‘([d]*)

([w]*)’).get( 0)neededData .loc[:,( ‘view_sales’)] = neededData[ ‘view_sales’].astype(int)neededData[ ‘time’] = datetime .datetime.now().strftime( ‘%Y%m%d%H’)

處理結果

生成翻頁器

最后就是生成翻頁器了,在剛剛的g_page_config中搜索pager試試:

尋找翻頁器

尋找翻頁器

將其中的u003d和=以及u0026和&作替換(我是通過字符替換處理。。單應該存在更加方便的,從編碼角度入手處理的方法。。求指教),并更換一二三頁,發現網址最后的參數s分別為0,44,88。結合上面第二張圖,可以猜到這個數字為單頁的店鋪總量,當頁面默認每頁的店鋪數為44的時候,只需要更改該參數即可達到翻頁效果。

數據可視化

為了對將銷售數據以及評論數據放在地圖上,顯示區域集中情況,首先需要將城市信息轉化為坐標信息,這個時候需要用到。而為了減少反復查詢的次數,需要對坐標信息進行存儲,即將位置數據存儲在sql中,邏輯是這樣:

查詢框圖邏輯

采用sqlite進行地理數據的存儲和查詢,對于查詢存在的數據直接輸出,查詢不存在的數據需要通過高德地圖的功能查詢。

2019/20190426A/F0120256

首先需要注冊自己的一個key,并在對應賬號的控制版內增加Web服務API功能,使用過程中將key值以及設置信息用dict格式表示,并加載在requests的param中。查詢輸出的數據格式有兩種,一種是json,一種是xml。這里輸出json,對json的字符串通過正則表達式將經緯度信息提取出來,提取出后存儲在數據文件中,并進行輸出。

defgetCenter(city):conn = sqlite3.connect( ‘citydata.db’) cursor = conn.cursor() cursor.execute( “CREATE TABLE IF NOT EXISTS CITYDATA(citycode text primary key

, name text, latitude real, longitude real);”) cursor.execute( “SELECT latitude, longitude FROM CITYDATA WHERE name = ?”,

(city,)) res = cursor.fetchall() ifnotres: payload = { ##yourkey = the key applied from amap.com‘key’:yourkey, ‘keywords’: ”, ‘subdistrict’: ‘0’, ‘showbiz’:

False, ‘output’: ‘json’, } payload[ ‘keywords’] = city jsonData = requests.get( ‘2019/20190426A/F0120257

params = payload) jsonText = jsonData.text center = re.search( r'”([d]*.[d]*),([d]*.[d]*)”‘, jsonText) cityCode = re.search( r'”citycode”:”(d*)”‘, jsonText) latitude = float(center.group( 1)) longitude = float(center.group( 2)) cursor.execute( “INSERT INTO CITYDATA VALUES(?, ?, ?, ?);”, [cityCode.group( 1),

city, latitude, longitude]) cursor.close() conn.commit() returnlatitude, longitude else: res = list(res[ 0]) returnres[ 0], res[ 1]

經緯度數據獲得后,需要輸出到現有的dataFrame中,由于上述函數有兩個輸出,不能通過apply函數得出,需要結合zip以及map函數來實現雙輸出:

neededData[ ‘latitude’], neededData[ ‘longitude’] = zip(*neededData[ ‘item_loc’].map(getCenter))

數據可視化

dataFrame的可視化工具有很多,常用的有matplotlib。但對于生成地理信息圖,似乎plotly更具有優勢,并且經過優化后,plotly生成的圖像質量要更高。嘗試下對view_sales列進行可視化操作,首先對該列進行排序:

neededData.sort_values( ‘view_sales’, axis = 0, ascending= False, inplace= True)

plotly在第一次使用的時候也需要設置自己的賬號信息,具體可以參考,

https://plot.ly/python/getting-started/

本機只要設置過一次賬號后,后面就可以不用再設置了。

首先需要對圖例進行設置:

import plotly.plotly as py length= len(newData)limits = [( 0, int( 0.05* length)),( int( 0.05* length), int( 0.2* length)),

( int( 0.2* length), int( 0.5* length)),( int( 0.5* length), length)]colors = [ “#0A3854”, “#3779A3”, “#1B85C6”, “#C0DAEA”]cities = []

而后就是設置每個點的地理信息、泡泡面積大小、泡泡顏色,并將dataFrame中的數據轉換為ployly可識別的格式中:

for i inrange(len(limits)): lim= limits[i] df_sub= newData[lim[ 0]:lim[ 1]]

city= dict( type= ‘scattergeo’, locationmode= ‘china’,

lon= df_sub[‘longitude’], lat= df_sub[‘latitude’],

text= df_sub[‘nick’], marker= dict(

size= df_sub[‘view_sales’]/ 10, color= colors[i],

line= dict( width= 0.5, color= ‘ #000′),sizemode= ‘area’, opacity= 0.5),

name= “{0} – {1}”.format(lim[ 0], lim[ 1]) ) cities.append(city)

最后是對圖紙信息進行設定,包括標題,是否顯示圖例。由于ployly中已經包含有地圖信息,因此只需設定顯示區域(scope),投影方式(projection),以及邊界線條顏色和邊界信息即可:

layout = dict( title= Keyword + “的淘寶分布”, showlegend = True, geo = dict( scope= “asia”, projection = dict( type= ‘mercator’), showland = True, landcolor = ‘rgb( 217, 217, 217)’, subunitwidth=1, countrywidth=1, subunitcolor= “rgb(255, 255, 255)”, countrycolor= “rgb(255, 255, 255)”, lonaxis = dict( range= [newData[‘longitude’].min() -3, newData[‘longitude’].max() + 3]), lataxis = dict( range= [newData[‘latitude’].min() -0.5, newData[‘latitude’].max() + 0.5]), ),)

完成后,輸出保存即可:

fig= dict( data= cities, layout= layout)py.iplot(fig, validate= False)

脫皮綠豆的淘寶分布

總結

本文基本實現了最初目的,模擬了淘寶的搜索數據,并初步對數據進行可視化。但該程序還有很多優化的地方:

在搜索過程中,發現對于同一個關鍵詞會出現很多不同種類的東西,例如你搜索蘋果,可能會出現iphone也有可能出現能吃的蘋果,不方便;

結合ML,實現深度的搜索,對同一個物品進行價格對比,銷量對比,客戶評價對比,幫助客戶進行選擇;

可視化的意義沒有體現出來;

本文中,還有bug未完善,很多地方需要采用try來規避。

文http://www.jianshu.com/p/9a9468d6d3ec

新浪微博名稱:大數據_機器學習

數據挖掘入門與實戰

搜索添加微信公眾號:datadw

教你機器學習,教你數據挖掘

長按圖片,識別二維碼,點關注

總結

以上是生活随笔為你收集整理的利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美一区二区三区视频在线观看 | 欧美特级特黄aaaaaa在线看 | 日韩黄色免费视频 | 极品美女开粉嫩精品 | 国产精品二区三区 | 日本一区二区三区成人 | 国产黄色小视频在线观看 | 亚洲AV无码一区二区三区性 | 超碰997| 波多野结衣一二区 | 色综合综合网 | 欧美大色 | 不卡av影院 | 日韩精美视频 | 91av网址 | 天天色一色 | 丁香婷婷久久久综合精品国产 | www成人在线| 日本免费色 | 波多野结衣理论片 | 爱爱视频欧美 | av日日夜夜 | 日韩在线三区 | 日本内谢少妇xxxxx少交 | 亚洲字幕av一区二区三区四区 | 在线观看a网站 | 欧美激情影院 | 97精品在线| 国产免费又粗又猛又爽 | 大粗鳮巴久久久久久久久 | 天天综合网久久 | 偷拍青青草 | 欧美 丝袜 自拍 制服 另类 | 在线国产91 | 在线国产91 | 五月天综合网 | 欧美极品一区二区三区 | 搡老熟女老女人一区二区 | 巨胸爆乳美女露双奶头挤奶 | 亚洲人妻电影一区 | 国产成人精品一区二区色戒 | 国产精品乱码久久久久久久久 | av av在线| 亚洲精品乱码久久久久久蜜桃图片 | 免费看av在线 | av中文资源 | 久操视频免费看 | 永久免费看mv网站入口78 | 草草影院在线观看视频 | 精品美女在线观看 | 欧美色国| 国产盗摄一区二区三区在线 | 美人被强行糟蹋np各种play | www.日本免费 | 少妇丰满尤物大尺度写真 | 日本xxxxxwwwww | 粉嫩小箩莉奶水四溅在线观看 | 丰满熟女人妻一区二区三 | 91官网在线| 永久免费看片在线播放 | 男人天堂tv | 午夜久 | 亚洲大乳| 国产成人精品久久二区二区 | 婷婷在线网| 少妇熟女高潮流白浆 | 久久午夜电影网 | 公侵犯人妻中文字慕一区二区 | 欧美不卡网 | 91久久精品一区 | 卡一卡二在线视频 | 国产精品久久久免费视频 | 插插插操操操 | 黄色av观看 | 日韩国产欧美精品 | 性――交――性――乱睡觉 | 91精品一区二区三区综合在线爱 | 久久久久久久成人 | 神马国产 | 国产又粗又长又硬免费视频 | 特黄视频在线观看 | 国产在线观看免费视频软件 | 极品少妇一区 | 国产三极片 | 黄色片xxxx| 久久久久婷 | 欧美一二三区视频 | 亚洲最大成人av | 亚洲一区二区久久 | 亚洲精品在线观看网站 | 伊人97 | 久久一精品 | 亚洲国产精品成人无码区 | 日本激情网 | 国产成人无码精品久久久性色 | 色漫 | 欧美日韩一区不卡 | 啪免费视频 | 日韩人妻一区二区三区 |