【Python爬虫系列】为什么我喜欢python?来看看这些让人爱不释手的原因吧,购物网站大盘点,看过这些python做的项目,我立马入坑了…(神奇 | 爱了,爱了)

导语

Python编程零基础如何逆袭成为爬虫实战高手?!

哈喽!我是木木子,你们的贴心小助手。想学习爬虫的小可爱注意啦,一定不要错过哦~

所有文章完整的素材+源码都在👇👇

粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。

今天带大家体验一下爬虫的魅力,让没接触的小可爱也爽一把。看看爬虫能给我们生活工作总

带来那些便利呢!我说大家听?nonono ,我们直接上案例,近距离手把手教大家实现爬虫。

——小tips

做学术研究、论文需要获取大量的数据、文献信息怎么办

现在Python爬虫很火,我没有基础应该从何学起

我是企业在网上看到一些数据想抓取下来怎么办

?我是做设计的,这么多素材我总不能一个一个下载,怎么办

!!!0基础起步,没有编程基础可以学

!!!关注小编,教你从零基础开始学习,新手大礼包找我就给(免费)

!!!在学完小编给大家准备的各种实战案例之后,爬取W博、D瓣、Z乎、M眼、T宝、S

宁、X程、G票,还有Zhi网……vip破解、wifi破解等手到擒来...想干啥不行?(当然犯法

的事情不行哈)爬虫虽好,但是不要乱爬哦,这就是另外的故事啦!

爬虫系列还在规划中,每次都给大家带来不同的爬虫案例实战,想学习的赶紧关注一波哦!

正文

嗨,我是木子,这次来分享一些有关于我的购物经验的爬虫内容!

今天的爬虫案例实战分为三大块哦:都是关于购物方面的网站,大家肯定猜到啦!

——怎样买到性价比高、配置好的笔记本?收好这份笔记本电脑选购指南。(J东爬虫)

——春天来了,女人都该“种草”了!(口红顶级攻略↓)(WP会爬虫)

——炎热的夏天到了,我该怎么选择物美价廉的短裤呢?!(T宝爬虫)

关于这三个购物网站,今天详细的给大家爬一爬啦!

一、Python采集JDD商品网站数据内容

1)提前准备

运行环境: Python 3.7 解析器 识别代码 ;Pycharm 编辑器 编辑代码 敲代码的工具 

pycharm vscode jupyter sublime 谷歌浏览器 谷歌驱动。

模块使用:  selenium ——pip install selenium==3.141.0 自动化测试 操作浏览器 4版本 和 

3版本 写法上有区别 用法是一样 csv 保存数据 保存csv文件

附:驱动下载地址,安装版本视频等。

 安装python第三方模块: 

1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车 

2. 在pycharm中点击Terminal(终端) 输入安装命令 。

安装失败原因: 

失败: pip 不是内部命令 解决方法: 设置环境变量 。

失败二: 出现大量报红 (read time out) 

 解决方法: 因为是网络链接超时, 需要切换镜像源 

 清华:https://pypi.tuna.tsinghua.edu.cn/simple 

 阿里云:https://mirrors.aliyun.com/pypi/simple/ 

 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 

 华中理工大学:https://pypi.hustunique.com/ 

 山东理工大学:https://pypi.sdutlinux.org/ 

 豆瓣:https://pypi.douban.com/simple/ 

 例如:pip3 install -i https://pypi.doubanio.com/simple/ 模块名 

失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入 解决

方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好 或者

你pycharm里面python解释器没有设置好。

2)实战解析

步骤:打开浏览器---访问Jdd----定位搜索框----输入关键字---点击回车----查看数据。

3)代码实现

"""
# 导入支持浏览器自动化模块
from selenium import webdriver
from selenium.webdriver.common.keys import Keys  # 导入键盘
import time
"""
from xxx import xxx
从哪里导入什么方法模块
import xxx  直接导入

pass 占位语句 唯一的作用就是占个位置

函数是必须要调用的

find_element_by_css_selector是通过css选择器来定位数据
语法 class ='xxx'-->.xxx
text 提取文本
"""
# 1.访问数据的函数
def spider_jd():
    # webdriver.Chrome(executable_path=浏览器驱动路径)
    driver = webdriver.Chrome()  # 打开浏览器
    driver.get('https://www.jd.com/')  # 访问京东
    input_tag = driver.find_element_by_id('key')  # 定位搜索框
    # print(input_tag)
    input_tag.send_keys('笔记本电脑')  # 在搜索框写入关键字
    input_tag.send_keys(Keys.ENTER)
    # driver.implicitly_wait(20)  # 等页面加载完之后就会直接运行下一个代码
    time.sleep(10)  # 等待5s 死等 必须等够10s
    get_info(driver)  # 调用函数

# 2. 查看数据的函数
def get_info(driver):
    # 名字 价格 链接
    goods = driver.find_elements_by_class_name('gl-item')  # 查找li标签
    for good in goods:
        # 提取商品名字
        name = good.find_element_by_css_selector('.p-name').text.replace('\n','')
        # print(name)
        # 提取商品文本
        link = good.find_element_by_tag_name('a').get_attribute('href')
        # print(link)
        price = good.find_element_by_css_selector('.p-price').text
        # print(name,link,price)
        zong = """
            名称:%s
            链接:%s
            价格:%s
        """%(name, link, price)
        print(zong)




spider_jd()  # 调用函数

4)效果展示

​二、Python爬虫实战-WP会商品数据

1)提前准备

大部分的环境,模块都是一样的,我就不重复那些安装步骤了哈。

运行环境: Python 3、 Pycharm。

模块安装: requests ---> pip install requests csv 内置模块 不需要安装。

如何配置pycharm里面的python解释器? 

 1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解

释器) 

 2. 点击齿轮, 选择add 3. 添加python安装路径

pycharm如何安装插件? 

 1. 选择file(文件) >>> setting(设置) >>> Plugins(插件) 。

 2. 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输

入 Chinese 。

 3. 选择相应的插件点击 install(安装) 即可 。

 4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效。

2)实现过程

1. 发送请求, 模拟浏览器对url地址发送请求 对于 存储商品ID数据包 url https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank 。

 2. 获取数据, 获取服务器返回响应数据 开发者工具: response 。

 3. 解析数据, 提取我们想要的内容 提取 120个商品ID 。

 4. 发送请求, 模拟浏览器对url地址发送请求 对于 商品信息存储数据包 发送请求 。

https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2 <把商品ID

传入进去> 。

 5. 获取数据, 获取服务器返回响应数据 开发者工具: response <商品基本信息> 。

 6. 解析数据, 提取我们想要的内容 提取 120个商品基本信息内容 标题 价格 标签 .... 

 7. 保存数据, 把数据保存表格里面  。

3)代码实现

"""
# 导入数据请求模块
import requests
# 导入格式化输出模块
from pprint import pprint
# 导入csv模块
import csv


def get_shop(shop_id):
    """
    自定义函数
    :param shop_id: 商品ID
    :return:
    """
    # 请求商品信息数据包
    link = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/product/module/list/v2'
    params = {
        # 'callback': 'getMerchandiseDroplets1',
        'app_name': 'shop_pc',
        'app_version': '4.0',
        'warehouse': 'VIP_HZ',
        'fdc_area_id': '104103101',
        'client': 'pc',
        'mobile_platform': '1',
        'province_id': '104103',
        'api_key': 'xxxxx',
        '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': '',
        '_': '1667477444740',
    }
    json_data = requests.get(url=link, params=params, headers=headers).json()
    for index in json_data['data']['products']:
        if 'labels' in list(index.keys()):
            labels = ','.join([label['value'] for label in index['labels']])
        else:
            labels = ''
        attrs = ','.join([attr['value'] for attr in index['attrs']])
        # https://www.vipglobal.hk/detail-1710620765-6918063477853790749.html
        href = f'https://www.vipglobal.hk/detail-{index["brandId"]}-{index["productId"]}.html'
        dit = {
            '标题': index['title'],
            '品牌': index['brandShowName'],
            '原价': index['price']['marketPrice'],
            '售价': index['price']['salePrice'],
            '折扣': index['price']['saleDiscount'],
            '标签': labels,
            '属性': attrs,
            '详情页': href,
        }
        csv_writer.writerow(dit)
        print(dit)


f = open('口红.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '标题',
    '品牌',
    '原价',
    '售价',
    '折扣',
    '标签',
    '属性',
    '详情页',
])
csv_writer.writeheader()
"""
1. 发送请求, 模拟浏览器对url地址发送请求
    - 对于长链接, 可以分段写
        问号前面 请求链接
        问号后面 请求参数/查询参数
    
    - 批量替换
        1. 选中替换内容 ctrl + r
        2. 勾选上 .* 正则
        3. 通过正则命令匹配数据替换
            (.*?): (.*)
            '$1': '$2',
    - 模拟伪装 headers 请求头 会 1 不会 0
        在开发者工具里面 Headers 下面 request headers 进行复制粘贴
"""
# 请求 存储商品ID数据包
url = 'https://mapi.vip.com/vips-mobile/rest/shopping/pc/search/product/rank'
# 请求参数
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',
    'api_key': 'xxxxxxxx',
    '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',
    '_': '1667477444738',
}
# 模拟浏览器
headers = {
    # referer 防盗链 告诉服务器请求url地址是从哪里跳转过来的
    'referer': 'https://category.vip.com/',
    # user-agent 用户代理, 表示浏览器基本身份信息
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求  把python代码伪装成浏览器去发送请求, 从而获取到服务器返回响应数据
response = requests.get(url=url, params=data, headers=headers)
# <Response [200]> 响应对象, 表示请求成功
print(response)
"""
2. 获取数据, 获取服务器返回响应数据
    当你获取 response.json() json字典数据
    - simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
        原因就是返回数据, 不是完整json数据格式
    - response.text 获取响应文本数据 ---> 在用re是可以提取数据
3. 解析数据, 提取我们想要的内容
    提取 120个商品ID
    
解析数据方法: 根据返回数据内容, 选择最方便解析方式
dit = {'键1': '值1', '键2': '值2'}
dit['键1']  ---> '值1'
字典取值方式, 键值对取值, 根据冒号左边的内容[键], 提取冒号右边的内容[值]

列表推导式会吗?  会 1 不会 2

# print(response.json()['data']['products'])

# 创建空列表
products = []
# for 循环把列表里面元素一个一个输出出来  ---> 从一个盒子里面把盒子里面的东西 一个一个拿出来
for i in response.json()['data']['products']:
    # i 字典
    # print(i['pid'])
    # 把提取出来 i['pid'] 商品ID 添加到 products 空列表里面
    products.append(i['pid'])

"""
# 列表推导式  基础语法知识点
products = [product['id'] for product in response.json()['data']['products']]
# 商品ID 分成三组, 前50 中50 后20  列表转字符串  join 把列表合并成字符串
shop_id_1 = ','.join(products[:50])
shop_id_2 = ','.join(products[50:100])
shop_id_3 = ','.join(products[100:])
get_shop(shop_id_1)
get_shop(shop_id_2)
get_shop(shop_id_3)

4)效果展示

采集数据:

保存表格:

​三、 Python爬虫实战-T宝商品数据内容

先使用selenium模块自动打开浏览器登录,然后再爬取商品数据,主要是2块内容。

1)提前准备‘

运行环境:python 3 pycharm 、selenium 模块 3.141.0 操作浏览器 Chromedriver.exe 

 Chrome浏览器。模块安装如前文,环境内容,驱动等前文都提到过的,这里不再重复哈。

2)代码实现

"""
from selenium import webdriver
from selenium.webdriver import ActionChains
import time
from info import PHONE, PASSWORD
import csv

f = open('淘宝.csv', mode='a', newline='', encoding='utf-8')
csv_writer = csv.writer(f)
csv_writer.writerow(['title', 'price', 'deal_cnt', 'shopName', 'location', 'link'])
def parse_data():
    # 取到所有的商品
    items = driver.find_elements_by_css_selector('#mainsrp-itemlist > div > div .item')
    for item in items:
        # 二次提取
        title = item.find_element_by_css_selector('.row.row-2.title').text
        price = item.find_element_by_css_selector('.price').text
        deal_cnt = item.find_element_by_css_selector('.deal-cnt').text
        shopName = item.find_element_by_css_selector('.shopname').text
        location = item.find_element_by_css_selector('.location').text
        # 属性内容提取方法
        link = item.find_element_by_css_selector('.pic-link').get_attribute('href')
        print(title, price, deal_cnt, shopName, location, link)
        csv_writer.writerow([title, price, deal_cnt, shopName, location, link])


options = webdriver.ChromeOptions()
options.add_experimental_option('excludeSwitches', ['enable-automation'])
# 屏蔽保存密码提示框
prefs = {'credentials_enable_service': False, 'profile.password_manager_enabled': False}
options.add_experimental_option('prefs', prefs)
# 反爬虫特征处理
options.add_argument('--disable-blink-features=AutomationControlled')
url = 'https://login.taobao.com/member/login.jhtml?redirectURL=https%3a%2f%2fs.taobao.com:443/search%2F_____tmd_____%2Fpage%2Flogin_jump%3Frand%3DS3WxGHAgAt756EpznwfNzJq2AFA2qBNla3j6EINUS8We9dazM_iKElp8DwVSHZUevpC41Bx7RzivXIj9RnZgdg%26_lgt_%3D635cd3ca1dff84b838cab2d2d4d18097___215918___cc5b261468f4cc78746cfc89b9c8179c___eaebc79cac1eb5d2f7d8b4595e00ec73155567f2fa11d3fa98d1009a8319d03fe95669dec8ebefd0673824737aba9336f0e031931b9132ad85013eb3be5f87fdfda1ffe6d0052b26010cff24765b937333be60e83f16310c86c494a16dd5d1b16c7f2de620667f2e22d717e3d5c8f4f1ef8b8415db5cc8cb7b25c3032c6b30b5%26x5referer%3Dhttps%253A%252F%252Fs.taobao.com%252Fsearch%253Fspm%253Da21bo.jianhua.201856-fline.5.5af911d9mgYSLf%2526q%253D%2525E7%25259F%2525AD%2525E8%2525A3%2525A4%2526refpid%253D430145_1006%2526source%253Dtbsy%2526style%253Dgrid%2526tab%253Dall%2526pvid%253Dd0f2ec2810bcec0d5a16d5283ce59f69%2526bcoffset%253D0%2526p4ppushleft%253D3%25252C44%2526s%253D44&uuid=635cd3ca1dff84b838cab2d2d4d18097'
# 1. 打开浏览器
driver = webdriver.Chrome(options=options)
# 2. 打开淘宝网
driver.get(url)
# 3. 登陆
# #fm-login-id 定位账号输入框的规则
driver.find_element_by_css_selector('#fm-login-id').send_keys(PHONE)
# #fm-login-password 定位密码输入框的规则
driver.find_element_by_css_selector('#fm-login-password').send_keys(PASSWORD)
try:
    time.sleep(1)
    driver.switch_to.frame(0)
    # 小滑块
    slider = driver.find_element_by_css_selector('#nc_1_n1z')
    # 点击小滑块 并且按住 滑块 不动
    ActionChains(driver).click_and_hold(on_element=slider).perform()
    # 往x轴水平移动
    ActionChains(driver).move_by_offset(xoffset=258, yoffset=0).perform()
    # 暂停0.5秒之后再松开鼠标
    ActionChains(driver).pause(0.5).release().perform()
    driver.switch_to.parent_frame()
except:
    print('没有遇到滑块')
# 点击登陆
driver.find_element_by_css_selectr('#login-form > div.fm-btn > button').click()
time.sleep(1)
for page in range(1, 100):
    parse_data()
    main_url = f'https://s.taobao.com/search?spm=a21bo.jianhua.201856-fline.5.5af911d9mgYSLf&q=%E7%9F%AD%E8%A3%A4&refpid=430145_1006&source=tbsy&style=grid&tab=all&pvid=d0f2ec2810bcec0d5a16d5283ce59f69&bcoffset=0&p4ppushleft=3%2C44&s={page * 44}'
    driver.get(main_url)

)效果展示

​总结

学完三个爬虫实战项目,我们也应认识到:Python在编程领域中十分流行。简直是

“上得厅堂(生活)下得厨房(工作)”,帮助满满!超级赞哦~

块来围观我的csdn圈儿吧,我的经验分享,技术更新,每天都在哦!

下一次更新什么内容呢?大家赶紧来评论吧!

🎯完整的免费源码领取处:找我吖!文末公众hao可自行领取,滴滴我也可!

🔨推荐往期文章——

 项目1.8  Wifi破解免费

Python编程零基础如何逆袭成为爬虫实战高手之《WIFI破解》(甩万能钥匙十条街)爆赞爆赞~

项目1.9  爬虫+数据分析实战:全球疫情最新消息、淘宝爬虫、秒杀脚本

【Python合集系列】爬虫有什么用,网友纷纷给出自己的答案,王老师,我..我想学那个..爬虫。可以嘛?“(代码免费分享)

项目1.0 烟花玫瑰(内含多份源码)

 Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰)

项目1.1 恋爱指南(内含多份源码)

【Python恋爱指南】二款甜度爆表的小程序出炉—还怕找不到对象嘛?

项目1.0  超级玛丽

程序员自制游戏:超级玛丽100%真实版,能把你玩哭了~【附源码】

项目1.1   扫雷

 Pygame实战:据说这是史上最难扫雷游戏,没有之一,你们感受下......

🎄文章汇总——

汇总合集 Python—2022 |已有文章汇总 | 持续更新,直接看这篇就够了

(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~)

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾木子吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值