人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Python實(shí)戰(zhàn)爬蟲(chóng)之女友欲買(mǎi)文胸不知何色更美

發(fā)布日期:2021-12-29 12:25 | 文章來(lái)源:站長(zhǎng)之家

情景再現(xiàn)

今日天氣尚好,女友忽然欲買(mǎi)文胸,但不知何色更美,遂命吾剖析何色買(mǎi)者益眾,為點(diǎn)議,事后而獎(jiǎng)勵(lì)之。

本文關(guān)鍵詞

協(xié)程并發(fā)😊、IP被封😳、IP代理😏、代理被封😭、一種植物🌿

挑個(gè)“軟柿子”

打開(kāi)京東,直接搜 【文胸】,挑個(gè)評(píng)論最多的

進(jìn)入詳情頁(yè),往下滑,可以看到商品介紹啥的,同時(shí)商品評(píng)價(jià)也在這里。

接下來(lái)重頭戲,F(xiàn)12 打開(kāi) 開(kāi)發(fā)者工具,選擇 Network,然后點(diǎn)擊全部評(píng)價(jià),抓取數(shù)據(jù)包。

將 url 打開(kāi),發(fā)現(xiàn)確實(shí)是評(píng)論數(shù)據(jù)。

單頁(yè)爬取

那我們先寫(xiě)個(gè)小 demo 來(lái)嘗試爬取這頁(yè)的代碼,看看有沒(méi)有什么問(wèn)題。

import requests
import pandas as pd
headers = {
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'
}
params = {
 'callback':'fetchJSON_comment98',
 'productId':'35152509650',
 'score':'0',
 'sortType':'6',
 'page': '5',
 'pageSize':'10',
 'isShadowSku':'0',
 'rid':'0',
 'fold':'1'
}
url = 'https://club.jd.com/comment/productPageComments.action?'
page_text = requests.get(url=url, headers=headers, params=params).text
page_text

數(shù)據(jù)處理

數(shù)據(jù)是獲取了,但前面多了一些沒(méi)用的字符(后面也有),很明顯不能直接轉(zhuǎn)成 json 格式,需要處理一下。

page_text = page_text[20: len(page_text) - 2]
data = json.loads(page_text)
data

現(xiàn)在數(shù)據(jù)格式處理好了,可以上手解析數(shù)據(jù),提取我們所需要的部分。這里我們只提取 id(評(píng)論id)、color(產(chǎn)品顏色)、comment(評(píng)價(jià))、time(評(píng)價(jià)時(shí)間)。

import pandas as pd
df = pd.DataFrame({'id': [],
 'color': [],
 'comment': [],
 'time': []})
for info in data['comments']:
 df = df.append({'id': info['id'],
  'color': info['productColor'],
  'comment': info['content'],
  'time': info['creationTime']},
 ignore_index=True)
df

翻頁(yè)操作

那么接下來(lái)就要尋找翻頁(yè)的關(guān)鍵了,下面用同樣的方法獲取第二頁(yè)、第三頁(yè)的url,進(jìn)行對(duì)比。

簡(jiǎn)單分析一下,page 字段是頁(yè)數(shù),翻頁(yè)會(huì)用到,值得注意的是 sortType,字面意思是排序類(lèi)型,猜測(cè)排序方式可能是:熱度、時(shí)間等。經(jīng)過(guò)測(cè)試發(fā)現(xiàn) sortType=5 肯定不是按時(shí)間排序的,應(yīng)該是熱度,我們要獲取按時(shí)間排序的,這樣后期比較好處理,然后試了幾個(gè)值,最后確定當(dāng) sortType=6 時(shí)是按評(píng)價(jià)時(shí)間排序。圖中最后還有個(gè) rid=0 ,不清楚什么作用,我爬取兩個(gè)相同的url(一個(gè)加 rid 一個(gè)不加),測(cè)試結(jié)果是相同的,所以不用管它。

擼代碼

先寫(xiě)爬取結(jié)果:開(kāi)始想爬 10000 條評(píng)價(jià),結(jié)果請(qǐng)求過(guò)多IP涼了,從IP池整了丶代理,也沒(méi)頂住,拼死拼活整了1000條,時(shí)間不夠,如果時(shí)間和IP充足,隨便爬。經(jīng)過(guò)測(cè)試發(fā)現(xiàn)這個(gè)IP封鎖時(shí)間不會(huì)超過(guò)一天,第二天我跑了一下也有數(shù)據(jù)。下面看看主要的代碼。

主調(diào)度函數(shù)

設(shè)置爬取的 url 列表,windows 環(huán)境下記得限制并發(fā)量,不然報(bào)錯(cuò),將爬取的任務(wù)添加到 tasks 中,掛起任務(wù)。

async def main(loop):
 # 獲取url列表
 page_list = list(range(0, 1000))
 # 限制并發(fā)量
 semaphore = asyncio.Semaphore(500)
 # 創(chuàng)建任務(wù)對(duì)象并添加到任務(wù)列表中
 tasks = [loop.create_task(get_page_text(page, semaphore)) for page in page_list]
 # 掛起任務(wù)列表
 await asyncio.wait(tasks)

頁(yè)面抓取函數(shù)

抓取方法和上面講述的基本一致,只不過(guò)換成 aiohttp 進(jìn)行請(qǐng)求,對(duì)于SSL證書(shū)的驗(yàn)證也已設(shè)置。程序執(zhí)行后直接進(jìn)行解析保存。

async def get_page_text(page, semaphore):
 async with semaphore:
  headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36'
  }
  params = {
'callback': 'fetchJSON_comment98',
'productId': '35152509650',
'score': '0',
'sortType': '6',
'page': f'{page}',
'pageSize': '10',
'isShadowSku': '0',
# 'rid': '0',
'fold': '1'
  }
  url = 'https://club.jd.com/comment/productPageComments.action?'
  async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(ssl=False), trust_env=True) as session:
while True:
 try:
  async with session.get(url=url, proxy='http://' + choice(proxy_list), headers=headers, params=params,
timeout=4) as response:# 遇到IO請(qǐng)求掛起當(dāng)前任務(wù),等IO操作完成執(zhí)行之后的代碼,當(dāng)協(xié)程掛起時(shí),事件循環(huán)可以去執(zhí)行其他任務(wù)。page_text = await response.text()# 未成功獲取數(shù)據(jù)時(shí),更換ip繼續(xù)請(qǐng)求if response.status != 200:
continueprint(f"第{page}頁(yè)爬取完成!")break
 except Exception as e:
  print(e)
  # 捕獲異常,繼續(xù)請(qǐng)求
  continue
  return parse_page_text(page_text)

解析保存函數(shù)

將 json 數(shù)據(jù)解析以追加的形式保存到 csv 中。

def parse_page_text(page_text):
 page_text = page_text[20: len(page_text) - 2]
 data = json.loads(page_text)
 df = pd.DataFrame({'id': [],
  'color': [],
  'comment': [],
  'time': []})
 for info in data['comments']:
  df = df.append({'id': info['id'],'color': info['productColor'],'comment': info['content'],'time': info['creationTime']},
  ignore_index=True)
 header = False if Path.exists(Path('評(píng)價(jià)信息.csv')) else True
 df.to_csv('評(píng)價(jià)信息.csv', index=False, mode='a', header=header)
 print('已保存')

可視化

顏色分布

排名前三分別是灰粉色、黑色、裸感膚色,多的不說(shuō),自己體會(huì)哈。

評(píng)價(jià)詞云圖

可以看出評(píng)價(jià)的關(guān)鍵詞大多是對(duì)上身感覺(jué)的一些描述,穿著舒服當(dāng)然是第一位的~

完結(jié)撒花,該向女朋友匯報(bào)工作了~

別忘記收藏哦~

到此這篇關(guān)于Python實(shí)戰(zhàn)爬蟲(chóng)之女友欲買(mǎi)文胸不知何色更美的文章就介紹到這了,更多相關(guān)Python 爬蟲(chóng)文胸內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開(kāi)通

自選配置、實(shí)時(shí)開(kāi)通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專(zhuān)屬顧問(wèn)服務(wù)

1對(duì)1客戶咨詢顧問(wèn)

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部