前言
嗨喽,大家好呀~这里是爱看美女的茜茜呐
又到了学Python时刻~
环境介绍:
-
python 3.8 越稳定越好
-
pycharm 2021专业版
一、苏宁
模块使用:
-
selenium >>> pip install selenium
3.141.0 Python当中的模块 操作 浏览器的驱动
-
Chrome浏览器
-
Chromedriver
浏览器驱动 操作浏览器 让 浏览器帮助我们去执行一些操作
思路:
日常如何打开浏览器查看商品的
代码就如何编写
-
用selenium打开一个谷歌浏览器
-
用谷歌浏览器 打开网站
-
提取商品信息 滚动
代码展示
导入模块
from selenium import webdriver # 第三方模块 3.141.0 pip install selenium==3.141.0 pip uninstall selenium
import time
import csv
PS:完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取
mode='a':
追加写入数据
encoding='utf-8':
编码方式 excel打开可能会出现中文乱码 换个软件打开 wps 或者换一个编码方式 gbk
newline='':
数据空行
f = open('suning.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.writer(f)
写入表头
csv_writer.writerow(['title', 'price', 'comment', 'store', 'detail_url'])
执行页面滚动的操作
def drop_down():
for x in range(1, 12, 2):
time.sleep(1)
j = x / 9
js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j
driver.execute_script(js)
def get_next():
divs = driver.find_elements_by_css_selector('.product-box')
针对divs:
所有的商品信息, 进行二次提取
针对每个商品==div
价格 + 名称 + 评论
.text:
提取标签 文本内容
.get_attribute('href'):
提取标签的属性内容
< a class=‘’ href=‘’ sa-data=‘’>
for div in divs:
price = div.find_element_by_css_selector('.def-price').text
title = div.find_element_by_css_selector('.title-selling-point').text
comment = div.find_element_by_css_selector('.info-evaluate').text
store = div.find_element_by_css_selector('.store-stock').text
detail_url = div.find_element_by_css_selector('.title-selling-point a').get_attribute('href')
print(title, price, comment, store, detail_url)
csv_writer.writerow([title, price, comment, store, detail_url])
chromedriver.exe
放到 python.exe
同级目录下
谷歌浏览器(正版的) + 谷歌驱动(操作浏览器的一个程序 版本号)
1.用selenium打开一个谷歌浏览器
driver = webdriver.Chrome()
for page in range(0, 50):
2.用谷歌浏览器 打开网站
3.下拉页面
drop_down()
4.提取数据 代码方式提取
get_next()
PS:完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取
二、淘
模块使用:
- requests 模块
代码展示
导入模块
import requests # 发送请求 第三方模块
import re
import json
import csv
with open('淘宝.csv', encoding='utf-8', mode='a', newline='') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(['raw_title', 'view_price', 'item_loc', 'view_sales', 'comment_count', 'nick', 'detail_url'])
伪装
- 发送请求
response = requests.get(url=url, headers=headers)
- 获取数据
html_data = response.text
- 解析数据
json_str = re.findall('g_page_config = (.*);', html_data)[0]
json_dict = json.loads(json_str)
字典 键值对取值
auctions = json_dict['mods']['itemlist']['data']['auctions']
for auction in auctions:
# auction代表每一个商品
raw_title = auction['raw_title']
view_price = auction['view_price']
item_loc = auction['item_loc']
try:
view_sales = auction['view_sales'] # 销量
except:
view_sales = 0
comment_count = auction['comment_count']
nick = auction['nick']
detail_url = auction['detail_url']
print(raw_title, view_price, item_loc, view_sales, comment_count, nick, detail_url)
- 保存数据
with open('淘宝.csv', encoding='utf-8', mode='a', newline='') as f:
csv_writer = csv.writer(f)
csv_writer.writerow([raw_title, view_price, item_loc, view_sales, comment_count, nick, detail_url])
三、考拉
模块使用:
-
requests >>> pip install requests
-
parsel >>> pip install parsel
代码展示
导入模块
# import 导入模块
import requests # 第三方模块 额外安装 内置: 不需要你额外安装
import parsel # 第三方模块 专门用来html标签数据
import csv # 表格 内置模块
with open('考拉海购.csv', mode='a', encoding='utf-8', newline='') as f:
csv_writer = csv.writer(f)
csv_writer.writerow(['title', 'price', 'comments', 'address', 'selfflag', 'img_url', 'href'])
# 字典
1. 发送请求
response = requests.get(url=url, headers=headers)
<Response [200]>: 请求成功
2. 获取数据
html_data = response.text
3. 解析数据
html css javascript(JS)
前端网页制作三剑客
html(html源代码):
展示数据内容的
css:
页面变得更加美观的
js:
页面设计的有动态效果的
select = parsel.Selector(html_data)
goods = select.css('.goodswrap.promotion')
for good in goods:
详情页链接
href = good.css('.title::attr(href)').get()
图片链接
img_url = good.css('.imgtag::attr(src)').get()
价格
price = good.css('.bigPrice::text').get()
标题
title = good.css('h2::text').get()
title = title.replace('\n', '')
评论数
comments = good.css('.comments::text').get()
地址
address = good.css('.proPlace.ellipsis::text').get()
商铺名称
selfflag = good.css('.selfflag span::text').get()
if selfflag == "" or selfflag == None:
selfflag = good.css('.selfflag a::text').get()
print(title, price, comments, address, selfflag, img_url, href)
文件名称
写入方式 追加写入
编码
with open('考拉海购.csv', mode='a', encoding='utf-8', newline='') as f:
csv_writer = csv.writer(f)
csv_writer.writerow([title, price, comments, address, selfflag, img_url, href])
PS:完整源码如有需要的小伙伴可以加下方的群去找管理员免费领取
四、唯
模块使用:
-
requests —> pip install requests
-
csv 内置模块 不需要安装
数据来源分析:
-
明确需求: 明确采集数据内容是什么
- 采集口红商品数据
-
通过浏览器自带工具:
开发者工具, 进行抓包分析 <无论采集那个网站什么数据, 都要抓包分析一下数据来源>
-
打开开发者工具: F12 或者 鼠标右键点击检查选择 network <网络面板>
-
刷新网页: 让本网页数据内容, 重新加载一遍
-
通过搜索功能, 去查询找到, 商品所对应url地址<数据包>
唯品会商品数据结构:
整页商品一共是120条数据内容, 分成三组: 前50, 中50, 后20 —> 对应就有三个url地址
分析这三个url地址, 请求参数变化 —> 改变商品ID —> 分析商品ID在什么地方可以一次性获得到
想要获取商品数据信息 —> 请求三个链接, 把商品ID切片分成三组 —> 商品ID
-
代码展示
# 导入数据请求模块
import requests
# 导入格式化输出模块
from pprint import pprint
# 导入csv模块
import csv
f = open('口红_1.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
'标题',
'品牌',
'售价',
'原价',
'折扣',
'色系',
'妆感',
'类型',
'是否套装',
'商品属性',
'详情页',
])
csv_writer.writeheader()
def Shop(shop_id):
shop_data = {
'app_name': 'shop_pc',
'app_version': '4.0',
'warehouse': 'VIP_HZ',
'fdc_area_id': '104103101',
'client': 'pc',
'mobile_platform': '1',
'province_id': '104103',
'user_id': '',
'mars_cid': '1655447722495_62c422a2b0d263186b2d64412108655f',
'wap_consumer': 'a',
'productIds': shop_id,
'scene': 'search',
'standby_id': 'nature',
'extParams': '{"stdSizeVids":"","preheatTipsVer":"3","couponVer":"v2","exclusivePrice":"1","iconSpec":"2x","ic2label":1,"superHot":1,"bigBrand":"1"}',
'context': '',
'_': '1669032748487',
}
json_data = requests.get(url=link, params=shop_data, headers=headers).json()
for index in json_data['data']['products']:
attrs = ','.join([attr['name'] + ':' + attr['value'] for attr in index['attrs']])
# 色系:红调,妆感:哑光,类型:唇釉,是否套装:是
colour = index['attrs'][0]['value'] # 色系
feel = index['attrs'][1]['value'] # 妆感
kid = index['attrs'][2]['value'] # 类型
Tao = index['attrs'][-1]['value'] # 是否套装
dit = {
'标题': index['title'],
'品牌': index['brandShowName'],
'售价': index['price']['salePrice'],
'原价': index['price']['marketPrice'],
'折扣': index['price']['mixPriceLabel'],
'色系': colour,
'妆感': feel,
'类型': kid,
'是否套装': Tao,
'商品属性': attrs,
'详情页': shop_url,
}
print(dit)
csv_writer.writerow(dit)
except:
pass
for page in range(0, 1200, 120):
data = {
# 'callback': 'getMerchandiseIds',
'app_name': 'shop_pc',
'app_version': '4.0',
'warehouse': 'VIP_HZ',
'fdc_area_id': '104103101',
'client': 'pc',
'mobile_platform': '1',
'province_id': '104103',
'user_id': '',
'mars_cid': '1655447722495_62c422a2b0d263186b2d64412108655f',
'wap_consumer': 'a',
'standby_id': 'nature',
'keyword': '口红',
'lv3CatIds': '',
'lv2CatIds': '',
'lv1CatIds': '',
'brandStoreSns': '',
'props': '',
'priceMin': '',
'priceMax': '',
'vipService': '',
'sort': '0',
'pageOffset': '0',
'channelId': '1',
'gPlatform': 'PC',
'batchSize': '120',
'_': '1669032748485',
}
response = requests.get(url=url, params=data, headers=headers)
products = [i['pid'] for i in response.json()['data']['products']]
product_id_1 = ','.join(products[:50]) # 0-49 顾头不顾尾 把列表合并为字符串 str.join(list)
product_id_2 = ','.join(products[50:100]) # 50-99 顾头不顾尾
product_id_3 = ','.join(products[100:]) # 100-最后 顾头不顾尾
Shop(shop_id=product_id_1)
Shop(shop_id=product_id_2)
Shop(shop_id=product_id_3)
尾语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。
最后,宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇