导语
Python编程零基础如何逆袭成为爬虫实战高手?!
哈喽!我是木木子,你们的贴心小助手。想学习爬虫的小可爱注意啦,一定不要错过哦~
所有文章完整的素材+源码都在👇👇
今天带大家体验一下爬虫的魅力,让没接触的小可爱也爽一把。看看爬虫能给我们生活工作总
带来那些便利呢!我说大家听?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 |已有文章汇总 | 持续更新,直接看这篇就够了
(更多内容+源码都在✨文章汇总哦!!欢迎阅读喜欢的文章🎉~)