Python 网页抓取优衣库

Python 网页抓取优衣库,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我是python新手,想在优衣库上浏览一个网站。我想把它变成一个循环,提取产品名称和价格,但首先我想抓取一个项目来说明这是可行的。但是在containers变量中,我有一个0,应该有4。我上错课了吗?我真的不知道从这里该去哪里 ## diff import bs4 import json from urllib.request import urlopen, Request from bs4 import BeautifulSoup as soup url1 = 'https://www.un

我是python新手,想在优衣库上浏览一个网站。我想把它变成一个循环,提取产品名称和价格,但首先我想抓取一个项目来说明这是可行的。但是在containers变量中,我有一个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))

为了降低产品价格,我通常使用selenium,因为您通常需要等待页面加载并使用无头浏览器。以下是我在Google Colab中主持的一个示例:

url='1〕https://www.uniqlo.com/jp/store/feature/uq/sale/women/'
获取驱动程序(url)
时间。睡眠(5)
cls=lambda ele,cls:ele.通过类名称(cls)查找元素
tag=lambda ele,tag:ele.find_element_by_tag_name(tag)
项目=[
{'product':cls(项,'name')。文本,
“价格”:cls(项目“价格”)。文本,
“链接”:标记(cls(项,'name'),'a')。获取属性('href'),
“时间戳”:int(time.time())}
用于驱动程序中的项。按类名称(“单位”)查找元素
]
#打印成漂亮的json字符串
导入json
#打印(json.dumps(项目,缩进=4))
#导出到csv
导入csv
def write_csv(路径、数据、模式='w'):
'''
将带有字典键的csv附加为列标题
Args:
路径(str):csv文件的路径
数据(dict):以键作为列标题的字典
和值作为列数据
模式(str):open()模式,w,r等。默认值:“w”
'''
打开(路径、模式)作为文件:
#将字段名设置为字典的键
fieldnames=list(数据[0].keys())
writer=csv.DictWriter(文件,字段名=字段名)
#如果文件是新的,则写入头
如果file.tell()==0:
writer.writeheader()
#写下行
writer.writerows(数据)
#编写csv,您可以附加
写入csv(“优衣库w.csv”,项目)
输出(csv):

如果要将每日价格附加到文件中,可以将参数
mode='a'
添加到
write\u csv()
函数中

导入请求
从bs4导入BeautifulSoup
参数={
“dispLayerInfoComingsoon”:“,
“DisplayerInfo完整”:“,
“dispLayerInfo”:"/ftop/uq/women/menu/sale/21、/ftop/uq/women/menu/sale/102、/ftop/uq/menu/sale/106、/ftop/uq/women/menu/sale/03、/ftop/uq/women/menu/sale/02、/ftop/uq/women/menu/sale/14、/ftop/uq/menu/menu/menu/menu/menu/sale/105、/ftop/uq/menu/menu/menu/menu/menu/menu/menu/menu/sale/11、/ftop/uq/uq/uq/menu/menu/menu/menu/menu/menu/menu/menu/menu/menu/sale/17、/108、/ftop/uq/uq/uq/u/女士/menu/sale/20、/ftop/uq/women/menu/sale/19、/ftop/uq/women/menu/sale/09“,
"_": "1589090253243"
}
标题={
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:76.0)Gecko/20100101 Firefox/76.0”,
“接受”:“text/html,*/*;q=0.01”,
“接受语言”:“en-US,en;q=0.5”,
“X-request-With”:“XMLHttpRequest”
}
def主(url):
r=requests.get(url,params=params,headers=headers)
soup=BeautifulSoup(r.content'html.parser')
names=[name.get_text(strip=True)表示汤中的名称。选择(“dt.name”)]
prices=[price.get_text(strip=True)表示汤中的价格。选择(
“dd.price.fr别名primary--color01”)]
对于zip中的项目(名称、价格):
打印(项目)
主要(”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版本

导入请求
从bs4导入BeautifulSoup
导入csv
参数={
“dispLayerInfoComingsoon”:“,
“DisplayerInfo完整”:“,
“dispLayerInfo”:/ftop/uq/women/menu/sale/21、/ftop/uq/women/menu/sale/102、/ftop/uq/menu/sale/106、/ftop/uq/women/menu/sale/03、/ftop/uq/women/menu/sale/02、/ftop/uq/women/menu/sale/14、/ftop/uq/menu/menu/menu/menu/menu/sale/105、/ftop/uq/menu/menu/menu/menu/menu/menu/menu/menu/sale/11、/ftop/uq/uq/uq/menu/menu/menu/menu/menu/menu/menu/menu/menu/menu/sale/17、/108、/ftop/uq/uq/uq/u/女士/menu/sale/20、/ftop/uq/women/menu/sale/19、/ftop/uq/women/menu/sale/09“,
"_": "1589090253243"
}
标题={
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64;rv:76.0)Gecko/20100101 Firefox/76.0”,
“接受”:“text/html,*/*;q=0.01”,
“接受语言”:“en-US,en;q=0.5”,
“X-request-With”:“XMLHttpRequest”
}
def主(url):
r=requests.get(url,params=params,headers=headers)
soup=BeautifulSoup(r.content'html.parser')
names=[name.get_text(strip=True)表示汤中的名称。选择(“dt.name”)]
prices=[price.get_text(strip=True)表示汤中的价格。选择(
“dd.price.fr别名primary--color01”)]
将open(“data.csv”,“w',newline=”“,encoding=“UTF-8”)作为f:
writer=csv.writer(f)
writer.writerow([“名称”、“价格”])
writer.writerows(zip(名称、价格))
主要(”https://www.uniqlo.com/jp/store/feature/uq/alias/v2/ajaxAliasItem.jsp")

如果你加载页面,你可以在一秒钟后看到价格被加载,在尝试提取元素之前,我很幸运地等待页面加载,我通常使用selenium而不是requests/urllib+bs4Hi顽强地这样做,我从未使用过selenium。也许你可以为这个例子提供一个例子?我能够得到一些数据分结果,但我在美国,所以编码很奇怪lol。等待5秒,然后获得产品和价格,结果如下:
“产品”:“\u30b3\u30c3\u30c8\u30f3\u30ab\u30b7\u30df\u30e4\u30af\u30eb\u30fc\u30cd\u30c3\u30af\u30bb\u30fc\u30bf\u30bf\u30bf\u9577\u8896\uff09”,“价格”:\u00229a50“
我将在几周后发布一个示例Hanks Tendous,我想这是一个从lol开始学习的坏示例。嗨,Tendous,我如何在pycharm windows上运行第一部分?我认为第一部分是基于linux的。@ChadHighfill无需使用
selenium
,检查下面的答案。我想我需要下载chromdriver并创建一个可执行路径。有没有办法将其写入输出csv文件?@ChadHighfill欢迎您。顺便说一句,csv版本更新了。我能问两件事吗1)你在哪里做的