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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python电商爬虫源码_吴裕雄--天生自然PYTHON爬虫:爬取某一大型电商网站的商品数据...

發(fā)布時(shí)間:2024/10/6 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python电商爬虫源码_吴裕雄--天生自然PYTHON爬虫:爬取某一大型电商网站的商品数据... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于這里的目標(biāo)是獲取整個(gè)自由行的產(chǎn)品列表,因此還需要獲取出發(fā)站點(diǎn)的列表,從不同的城市出發(fā),會(huì)有不用的產(chǎn)品。

返回自由行的首頁(yè),單擊搜索框左側(cè)的出發(fā)站點(diǎn),如下圖:

切換到Headers界面:

可以看到此時(shí)目標(biāo)的URL是:https://touch.dujia.qunar.com/depCities.qunar

開(kāi)始分析該網(wǎng)站的爬蟲(chóng)工作流程分析步驟:

1 獲取出發(fā)地站點(diǎn)列表

2 獲取旅游景點(diǎn)列表

3 獲取景點(diǎn)產(chǎn)品列表

4 存儲(chǔ)數(shù)據(jù)

#首先獲取出發(fā)站點(diǎn),代碼如下:

importrequests

url= 'https://touch.dujia.qunar.com/depCities.qunar'strhtml=requests.get(url)

dep_dict=strhtml.json()for dep_item in dep_dict['data']:for dep in dep_dict['data'][dep_item]:print(dep)

。。。。。。。。。

在獲取數(shù)據(jù)的時(shí)候需要將最后一個(gè)callback參數(shù)刪掉。因此目標(biāo)URL如下:

https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep=%E6%B7%B1%E5%9C%B3&exclude=&extensionImg=255,175

#然后根據(jù)出發(fā)地站點(diǎn)獲取目的地,代碼如下:

importtimeimporturllibimportrequests

url= 'https://touch.dujia.qunar.com/depCities.qunar'strhtml=requests.get(url)

dep_dict=strhtml.json()for dep_item in dep_dict['data']:for dep in dep_dict['data'][dep_item]:print(dep)

url= 'https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep))

time.sleep(3)

strhtml=requests.get(url)

arrive_dict=strhtml.json()for arr_item in arrive_dict['data']:for arr_item_1 in arr_item['subModules']:for query in arr_item_1['items']:print(query['query'])

.................

到達(dá)的 目的地有很多,上面這段代碼也要運(yùn)行很長(zhǎng)時(shí)間,運(yùn)行截圖也是一部分的,篇幅有限還有很多地點(diǎn)沒(méi)有展示,但很容易看到許多的目的地是重復(fù)的,

原因也很簡(jiǎn)單一個(gè)目的地多數(shù)都是對(duì)應(yīng)這多個(gè)出發(fā)點(diǎn)的,按出發(fā)點(diǎn)分別來(lái)找目的地的話最后打印尋找到的目的地肯定有許多也就是重復(fù)的了,所以接下來(lái)

就是要對(duì)目的地進(jìn)行去重,代碼修改后,如下:

#然后根據(jù)出發(fā)地站點(diǎn)獲取目的地,代碼如下:

importtimeimporturllibimportrequests

url= 'https://touch.dujia.qunar.com/depCities.qunar'strhtml=requests.get(url)

dep_dict=strhtml.json()for dep_item in dep_dict['data']:for dep in dep_dict['data'][dep_item]:#這里聲明一個(gè)列表a用來(lái)保存當(dāng)前這個(gè)出發(fā)點(diǎn)對(duì)應(yīng)的所有目的地

a =[]print(dep)

url= 'https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep))

time.sleep(3)

strhtml=requests.get(url)

arrive_dict=strhtml.json()for arr_item in arrive_dict['data']:for arr_item_1 in arr_item['subModules']:for query in arr_item_1['items']:#如果當(dāng)前這個(gè)目的地不在a中的話,那就添加進(jìn)去,否則不添加,這樣就可以達(dá)到目的地去重的目的了

if(query['query'] not ina):

a.append(query['query'])#打印當(dāng)前出發(fā)點(diǎn)所有對(duì)應(yīng)的不重復(fù)的目的地點(diǎn)

print(a)

這樣每個(gè)出發(fā)點(diǎn)對(duì)應(yīng)的目的點(diǎn)打印出來(lái)也好看清晰了許多。

完成了出發(fā)點(diǎn)和目的地的構(gòu)建之后,接下來(lái)就要獲取產(chǎn)品列表了。代碼如下:

#獲取產(chǎn)品列表

importtimeimporturllibimportpymongoimportrequests#使用MongoDB創(chuàng)建數(shù)據(jù)庫(kù)、表

client = pymongo.MongoClient('localhost',27017)

book_qunar= client['qunar']

sheet_qunar_zyx= book_qunar['qunar_zyx']#獲取產(chǎn)品

url = 'https://touch.dujia.qunar.com/depCities.qunar'strhtml=requests.get(url)

dep_dict=strhtml.json()for dep_item in dep_dict['data']:for dep in dep_dict['data'][dep_item]:#這里聲明一個(gè)列表a用來(lái)保存當(dāng)前這個(gè)出發(fā)點(diǎn)對(duì)應(yīng)的所有目的地

a =[]

url= 'https://touch.dujia.qunar.com/golfz/sight/arriveRecommend?dep={}&exclude=&extensionImg=255,175'.format(urllib.request.quote(dep))

time.sleep(3)

strhtml=requests.get(url)

arrive_dict=strhtml.json()for arr_item in arrive_dict['data']:for arr_item_1 in arr_item['subModules']:for query in arr_item_1['items']:#如果當(dāng)前這個(gè)目的地不在a中的話,那就添加進(jìn)去,否則不添加,這樣就可以達(dá)到目的地去重的目的了

if(query['query'] not ina):

a.append(query['query'])#逐個(gè)地取出當(dāng)前出發(fā)點(diǎn)對(duì)應(yīng)的目的地item

for item ina:

url= 'https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep={}&query={}&dappDealTrace=true&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery={}&limit=0,24&includeAD=true&qsact=search'.format(urllib.request.quote(dep),urllib.request.quote(item),urllib.request.quote(item))

time.sleep(3)

strhtml=requests.get(url)#獲取當(dāng)前目的地的產(chǎn)品數(shù)量

routeCount = int(strhtml.json()['data']['limit']['routeCount'])for limit in range(0,routeCount,24):

url= 'https://touch.dujia.qunar.com/list?modules=list%2CbookingInfo%2CactivityDetail&dep={}&query={}&dappDealTrace=true&mobFunction=%E6%89%A9%E5%B1%95%E8%87%AA%E7%94%B1%E8%A1%8C&cfrom=zyx&it=dujia_hy_destination&date=&needNoResult=true&originalquery={}&limit={},24&includeAD=true&qsact=search'.format(urllib.request.quote(dep),urllib.request.quote(item),urllib.request.quote(item),limit)

time.sleep(3)

strhtml=requests.get(url)#用一個(gè)字典保存當(dāng)前這個(gè)產(chǎn)品的信息

result ={'date':time.strftime('%Y-%m-%d',time.localtime(time.time())),'dep':dep,'arrive':item,'limit':limit,'result':strhtml.json()

}#向數(shù)據(jù)庫(kù)中插入這條產(chǎn)品信息記錄

sheet_qunar_zyx.insert_one(result)print('成功!')

爬取的數(shù)據(jù)量是非常大的 代碼需要運(yùn)行非常長(zhǎng)的時(shí)間,運(yùn)行代碼打開(kāi)pycharm就可以觀察到保存的數(shù)據(jù)了(前提是pycharm已經(jīng)安裝好了mongo的插件了以及本地安裝配置好mongodb了)

總結(jié)

以上是生活随笔為你收集整理的python电商爬虫源码_吴裕雄--天生自然PYTHON爬虫:爬取某一大型电商网站的商品数据...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。