首页 > 解决方案 > 网页抓取优衣库

问题描述

我是 python 新手,想在网上抓取一个网站 uniqlo。我想把它变成一个循环并提取产品名称和价格,但首先我想抓住一个项目来证明这是有效的。但是在容器变量中,我有一个 0,应该有 4。我抓错了类吗?我真的不知道从这里去哪里。

## diff
import bs4
import json
from urllib.request import urlopen, Request
from bs4 import BeautifulSoup as soup

url1 = 'https://www.uniqlo.com/jp/store/feature/uq/sale/women/'

uClient = urlopen(Request(url1, headers={'User-Agent': 'Mozilla'}))
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html,"html.parser")
filename = "FemaleProducts.csv"
file = open(filename,"w",newline='')
product_list = []

containers = page_soup.findAll("div",{"class":"unit 13_alias_color_chip_group alias_initialized color_chip_init"})   #Find all li with class: grid-tile
print(len(containers))

标签: pythonweb-scrapingbeautifulsoup

解决方案


import requests
from bs4 import BeautifulSoup

params = {
    "dispLayerInfoComingsoon": "",
    "dispLayerInfoFull": "",
    "dispLayerInfo": "/ftop/uq/women/menu/sale/21,/ftop/uq/women/menu/sale/102,/ftop/uq/women/menu/sale/106,/ftop/uq/women/menu/sale/03,/ftop/uq/women/menu/sale/02,/ftop/uq/women/menu/sale/14,/ftop/uq/women/menu/sale/105,/ftop/uq/women/menu/sale/11,/ftop/uq/women/menu/sale/17,/ftop/uq/women/menu/sale/107,/ftop/uq/women/menu/sale/18,/ftop/uq/women/menu/sale/108,/ftop/uq/women/menu/sale/20,/ftop/uq/women/menu/sale/19,/ftop/uq/women/menu/sale/09",
    "_": "1589090253243"
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
    "Accept": "text/html, */*; q=0.01",
    "Accept-Language": "en-US,en;q=0.5",
    "X-Requested-With": "XMLHttpRequest"
}


def main(url):
    r = requests.get(url, params=params, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    names = [name.get_text(strip=True) for name in soup.select("dt.name")]
    prices = [price.get_text(strip=True) for price in soup.select(
        "dd.price.fr-alias-primary--color01")]
    for items in zip(names, prices):
        print(items)


main("https://www.uniqlo.com/jp/store/feature/uq/alias/v2/ajaxAliasItem.jsp")

输出:

('ティアードスカート', '¥2,990')
('アナ スイ ソフトコットンブラウス(長袖)', '¥1,990')
('アナ スイ ソフトコットンブラウス(長袖)', '¥1,990')
('コート', '¥4,990')
('モックネックT(長袖)', '¥990')
('ベルテッドプリーツジーンズ(丈標準70cm)', '¥1,990')
('コットンリバーシブルパーカ', '¥4,990')
('ディズニー ラブ ミニー マウス コレクション バイ アンブッシュ パーカ', '¥3,990')
('ポケッタブルUVカットパーカ', '¥1,990')
('コットンパーカ', '¥2,990')
('リブブルゾン', '¥2,990')
('ロングコート', '¥4,990')
('コート', '¥4,990')
('ディズニー ラブ ミニー マウス コレクション バイ アンブッシュ コート', '¥3,990')
('ディズニー ラブ ミニー マウス コレクション バイ アンブッシュ コート', '¥3,990')
('リラックストレンチコート', '¥5,990')
('トレンチコート', '¥4,990')
('リネンコットンコート(ストライプ)', '¥2,990')
('パデットライナーモッズコート', '¥4,990')
('トラッカージャケット', '¥2,990')
('ジャージーテーラージャケット', '¥4,990')
('UVカットリラックスジャケット', '¥3,990')
('リネンコットンシャツジャケット', '¥1,990')
('ジャージーリラックスジャケット', '¥1,990')
('デニムオーバーサイズジャケット', '¥1,990')
('デニムジャケット', '¥2,990')
('コットンシャツジャケット', '¥1,990')
('パデットシャツジャケット', '¥2,990')
('パデットシャツジャケット', '¥2,990')
('ポンチラウンドネックジャケット', '¥3,990')
('ポンチラウンドネックジャケット', '¥3,990')
('ポンチラウンドネックジャケット', '¥3,990')
('ボリュームVネックロングセーター(長袖)', '¥990')
('リブモックネックセーター(長袖)', '¥1,290')
('3DコットンプリーツVネックセーター(5分袖)', '¥1,990')
('カラーミックスクルーネックセーター(長袖)', '¥990')
('シャイニーリブハイネックセーター(長袖)', '¥790')
('ライトスフレヤーンポインテールクルーネックセーター(長袖)', '¥790')
('ライトスフレヤーンリラックスクルーネックセーター(長袖)', '¥990')
('リブクルーネックセーター(半袖)', '¥1,990')
('リブクルーネックセーター(ノースリーブ)', '¥1,990')
('ミドルゲージクルーネックセーター(長袖)', '¥1,290')
('コットンカシミヤクルーネックセーター(長袖)', '¥1,290')
('UVカットスリットロングカーディガン(長袖)', '¥1,990')
('Joy of Printシフォンワンピース(7分袖)', '¥2,990')
('フィンレイソン Tワンピース(5分袖)', '¥1,990')
('3Dコットンリブクルーネックワンピース(半袖・ショート丈・78.5~88cm)', '¥3,990')
('3Dコットンリブクルーネックワンピース(半袖・レギュラー丈・84.5~94cm)', '¥3,990')
('3Dコットンリブクルーネックワンピース(半袖・ロング丈・90.5~100cm)', '¥3,990')
('レーヨンオープンカラーワンピース(半袖)', '¥3,990')
('コットンリネンシャツワンピース(長袖)', '¥2,990')
('リネンブレンドVネックワンピース(長袖)', '¥2,990')
('ポロワンピース(5分袖)', '¥1,990')
('ドローストリングシャツワンピース(長袖)', '¥1,990')
('デニムドローストリングワンピース(長袖)', '¥1,290')
('リネンコットンシャツワンピース(長袖)', '¥2,990')
('ディズニー・ストーリーズ スウェットワンピース(長袖)', '¥1,990')
('プリントシャツワンピース(7分袖)', '¥1,990')
('ジョーゼットプリーツワンピース(長袖)', '¥2,990')
('ベルテッドロングシャツワンピース(長袖)', '¥1,990')
('レーヨンシャツワンピース(7分袖)', '¥2,990')
('エクストラファインコットンAラインワンピース(長袖)', '¥1,990')
('レーヨンカシュクールワンピース(長袖)', '¥1,290')
('レーヨンプリントシャツワンピース(ドット・7分袖)', '¥2,990')
('クルーネックTワンピース(半袖)', '¥1,290')
('スタンドカラーシャツワンピース(7分袖)', '¥3,990')
('リネンブレンドギャザーワンピース(7分袖)', '¥2,990')
('ポンチフレアワンピース(長袖)', '¥1,990')
('アナ スイ ソフトコットンブラウス(長袖)', '¥1,990')
('アナ スイ ソフトコットンブラウス(長袖)', '¥1,990')
('アナ スイ ソフトコットンブラウス(長袖)', '¥1,990')
('ギャザーブラウス(半袖)', '¥1,990')
('ロングシャツ(長袖)', '¥2,990')
('ギャザースリーブシャツ(長袖)', '¥1,990')
('ギャザーブラウス(半袖)', '¥1,990')
('デニムオーバーサイズシャツ(長袖)', '¥1,290')
('オーバーサイズシャツ(長袖)', '¥1,290')
('オーバーサイズシャツ(長袖)', '¥1,290')
('Tブラウス(長袖)', '¥1,290')
('ジョーゼットプリーツブラウス(長袖)', '¥1,290')
('コットンリネンチュニック(長袖)', '¥2,990')
('コットンリネンチュニック(長袖)', '¥2,990')
('リネンコットンチュニック(長袖)', '¥2,990')
('コットンチュニック(長袖)', '¥2,990')
('レーヨンブラウス(長袖)', '¥990')
('ドライソフトスウェットプルパーカ(長袖)', '¥990')
('スウェットオーバーサイズプルパーカ(長袖)', '¥1,290')
('ディズニー・ストーリーズ スウェットプルパーカ(長袖)', '¥990')
('スウェットボクシークルーネックシャツ(長袖)', '¥990')
('スウェットハーフジップシャツ(長袖)', '¥990')
('リブボートネックT(長袖)', '¥500')
('マーセライズコットンシャーリングボリュームスリーブT(7分袖)', '¥990')      
('リブラウンドネックT(長袖)', '¥500')
('モックネックT(長袖)', '¥990')
('クレープジャージーチュニック(半袖)セットアップ可能', '¥1,290')
('リラックスフィットクルーネックT(半袖)', '¥500')
('美少女戦士セーラームーン UT(グラフィックTシャツ・半袖)', '¥790')
('美少女戦士セーラームーン UT(グラフィックTシャツ・半袖)', '¥790')
('ベルテッドプリーツジーンズ(丈標準70cm)', '¥1,990')
('ベルテッドプリーツジーンズ(丈長め82cm)', '¥1,990')
('ウルトラストレッチジーンズ', '¥2,990')
('ハイライズストレートジーンズ(丈標準72cm)', '¥500')
('ハイライズボーイフレンドジーンズ', '¥2,990')
('ワイドフィットカーブジーンズ(丈長め82cm)', '¥1,990')
('ワイドフィットカーブジーンズ', '¥1,990')
('ワイドフィットカーブジーンズ', '¥1,990')
('ウールブレンドワイドパンツ', '¥2,990')
('ワイドフィットカーブパンツ', '¥1,290')
('ワイドフィットカーブパンツ(丈長め78cm)', '¥1,290')
('ウルトラストレッチレギンスパンツ(丈標準69.5~71.5cm)', '¥1,290')
('ウルトラストレッチプリントレギンスパンツ(丈標準69.5~71.5cm)', '¥1,290')
('ウルトラストレッチレギンスパンツ(丈長め74.5~76.5cm)', '¥1,290')
('ウルトラストレッチプリントレギンスパンツ(丈長め74.5~76.5cm)', '¥1,290')  
('コットンツイルタックベルテッドパンツ', '¥1,990')
('ワイドフィットカーブツイルジャージーパンツ(丈標準69~71cm)', '¥1,990')    
('ワイドフィットカーブツイルジャージーパンツ(丈長め76cm)', '¥1,990')        
('カーペンターパンツ', '¥1,990')
('コットンイージーパンツ', '¥1,990')
('ツイルジャージーイージーパンツ', '¥2,990')
('パラシュートパンツ', '¥2,990')
('チノワイドパンツ', '¥2,990')
('デニムイージーアンクルパンツ', '¥2,990')
('ルーズフィットカーゴジョガーパンツ(丈標準64~66cm)', '¥990')
('ルーズフィットカーゴジョガーパンツ(丈長め71cm)', '¥990')
('ドレープリラックステーパードアンクルパンツ(丈長め74cm)', '¥1,990')        
('ドレープリラックステーパードアンクルパンツ(丈標準67~69cm)', '¥1,990')    
('ディズニー ラブ ミニー マウス コレクション バイ アンブッシュ イージーアンク 
ルパンツ', '¥1,990')
('ディズニー ラブ ミニー マウス コレクション バイ アンブッシュ イージーアンク 
ルパンツ', '¥1,990')
('ストレートアンクルパンツ', '¥1,990')
('デニムイージーショーツ', '¥1,990')
('ドライストレッチジョガーパンツ(レングス72~74cm)', '¥390')
('ティアードスカート', '¥2,990')
('ティアードスカート', '¥2,990')
('ラップスカート', '¥2,990')
('タックフレアスカート', '¥2,990')
('プリントマーメイドロングスカート(丈標準82~87cm)', '¥1,290')
('シフォンプリーツプリントロングスカート(ドット・丈標準78~82cm)', '¥1,290')
('シフォンプリーツプリントロングスカート(ドット・丈短め73~77cm)', '¥1,290')
('コットンマーメイドロングスカート(ハイウエスト・丈標準80~84cm)', '¥1,290')
('コットンマーメイドロングスカート(ハイウエスト・丈短め75~79cm)', '¥1,290')
('ドライストレッチタックフレアスカート(ハイウエスト・丈標準73~77cm)', '¥990')
('コットンマーメイドロングスカート(ハイウエスト・デニム・丈標準80~84cm)', '¥1,290')
('ドライストレッチタックフレアスカート(ハイウエスト・丈短め68~72cm)', '¥990')
('デニムジャージースカート(丈標準73.5~77.5㎝)', '¥1,290')
('レーヨンラップスカート', '¥1,990')
('レーヨンラップスカート', '¥1,990')
('レーヨンラップスカート', '¥1,990')
('コットンツイルベルテッドスカート', '¥1,990')
('ツイルジャージーラップスカート', '¥1,990')
('ライトコットンギャザースカート', '¥1,990')
('3Dコットンフレアミディスカート セットアップ可能', '¥990')
('エアリズムキャミソール(ヘザー)', '¥500')
('エアリズムブラキャミソール', '¥990')
('コンフィールタッチフラットシューズ', '¥1,990')
('ブロックテックショルダーバッグ', '¥2,990')

CSV 版本

import requests
from bs4 import BeautifulSoup
import csv

params = {
    "dispLayerInfoComingsoon": "",
    "dispLayerInfoFull": "",
    "dispLayerInfo": "/ftop/uq/women/menu/sale/21,/ftop/uq/women/menu/sale/102,/ftop/uq/women/menu/sale/106,/ftop/uq/women/menu/sale/03,/ftop/uq/women/menu/sale/02,/ftop/uq/women/menu/sale/14,/ftop/uq/women/menu/sale/105,/ftop/uq/women/menu/sale/11,/ftop/uq/women/menu/sale/17,/ftop/uq/women/menu/sale/107,/ftop/uq/women/menu/sale/18,/ftop/uq/women/menu/sale/108,/ftop/uq/women/menu/sale/20,/ftop/uq/women/menu/sale/19,/ftop/uq/women/menu/sale/09",
    "_": "1589090253243"
}

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:76.0) Gecko/20100101 Firefox/76.0",
    "Accept": "text/html, */*; q=0.01",
    "Accept-Language": "en-US,en;q=0.5",
    "X-Requested-With": "XMLHttpRequest"
}


def main(url):
    r = requests.get(url, params=params, headers=headers)
    soup = BeautifulSoup(r.content, 'html.parser')
    names = [name.get_text(strip=True) for name in soup.select("dt.name")]
    prices = [price.get_text(strip=True) for price in soup.select(
        "dd.price.fr-alias-primary--color01")]
    with open("data.csv", 'w', newline="", encoding="UTF-8") as f:
        writer = csv.writer(f)
        writer.writerow(["Name", "Price"])
        writer.writerows(zip(names, prices))


main("https://www.uniqlo.com/jp/store/feature/uq/alias/v2/ajaxAliasItem.jsp")

推荐阅读