Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从登陆到爬取:Python反反爬获取某宝成千上万条公开商业数据

从登陆到爬取:Python反反爬获取某宝成千上万条公开商业数据

作者头像
荣仔_最靓的仔
发布于 2021-02-02 09:50:50
发布于 2021-02-02 09:50:50
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

不知从何时起,开始享受上了爬取成千上万条数据的感觉!

本文将运用Python反反爬技术讲解如何获取某宝成千上万条公开商业数据。

目录

1 前期准备

2 案例详解

2.1 导入模块

2.2 核心代码

2.3 总观代码

3 总结声明


1 前期准备

Python环境:Python 3.8.2

Python编译器:JetBrains PyCharm 2018.1.2 x64

第三方库及模块:selenium、time、csv、re

此外,还需要一个浏览器驱动器:webDriver

其中,selenium是一个第三方库,需要另外安装,就在终端输入下述命令行即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install selenium

输入

若未报错则证明第三方库安装成功。

这里再说一下浏览器驱动器如何安装(以谷歌浏览器为例介绍):

首先,下载浏览器驱动器WebDriver

chrom浏览器的驱动器下载地址:http://npm.taobao.org/mirrors/chromedriver/

firefox(火狐浏览器)的驱动器下载地址:https://github.com/mozilla/geckodriver/releases

Edge浏览器的驱动器下载地址:https://developer.microsoft.com/en-us/micrsosft-edage/tools/webdriver

Safari浏览器的驱动器下载地址:https://webkit.org/blog/6900/webdriver-support-in-safari-10/

以谷歌浏览器为例,需要首先知道浏览器的版本号

只需要前面的

对应好就OK,大的方向对应了就行,然后找到相匹配的版本进行下载

下载好以后测试一下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 从 selenium 里面导入 webdriver
from selenium import webdriver

# 指定 chrom 驱动(下载到本地的浏览器驱动器,地址定位到它)
driver = webdriver.Chrome('E:/software/chromedriver_win32/chromedriver.exe')

# get 方法打开指定网址
driver.get('http://www.baidu.com')

至此,准备工作就绪,接下来正式进入爬虫案例讲解

2 案例详解

2.1 导入模块

将前文所述的第三方库及相关模块进行导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver import ActionChains # 导入动作链
from selenium import webdriver
import time
import csv
import re

2.2 核心代码

确定目标网页:淘宝网(官网)

编写自动打开目标网页代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 传入浏览器驱动本地地址
driver = webdriver.Chrome('E:/software/chromedriver_win32/chromedriver.exe')
# 传入目标页面地址
driver.get('https://www.taobao.com/')

最大化浏览器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.maximize_window() # 最大化浏览器

传入关键字并实现自动搜索商品

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
keyword = input('请输入您要搜索的商品名字:')
driver.find_element_by_id('q').send_keys(keyword)  # 根据“检查”的id值精确定位淘宝网搜索框并传入关键字
driver.find_element_by_class_name('btn-search').click() # 根据class标签'btn-search'定位到搜索按钮并点击

这时我们发现,需要登录才能查看搜索内容,那么接下来解决登陆问题

传入账号密码(这里通过F12键定位其xpath值)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys('账号')
driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys('密码')

解决人机验证问题(反反爬,实现滑块向右滑动)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
login = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]') # 通过xpath找到滑块
action = ActionChains(driver)  # 创造出一个动作链
action.click_and_hold(on_element=login) # 点击不松开
action.move_by_offset(xoffset=300-42, yoffset=0) # 通过坐标轴滑动
action.pause(0.5).release().perform() # 设置链式调用时间(滑动滑块时间),并松开鼠标   perform()执行动作链

获取整个页面的目标数据值(for循环)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
divs = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')
for div in divs:
    info = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
    price = div.find_element_by_xpath('.//strong').text
    deal = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text
    shop = div.find_element_by_xpath('.//div[@class="shop"]/a').text

保存文件(以csv格式进行存储)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
with open('data.csv', mode='a', newline="") as csvfile:
    csvWriter = csv.writer(csvfile, delimiter=',')
    csvWriter.writerow([info, price, deal, shop])

以上是爬取一页数据,那么爬取多页数据怎么撸代码呢

获取总页数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
page = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text # 获取总页数标签
page_list = re.findall('(\d+)', page)  # 正则表达式获取多个精确数字数据[返回的是列表]
page_num = page_list[0]   # 字符串类型数据

for循环遍历所有页面,获取该商品的所有数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword, page_num*44))
page_num += 1

值得注意的是,上述代码的页面地址是根据查看多页地址数据获得规律总结出来的

很显然,从第

页数据地址开始,其

值从

,以数字44叠加规律生成。

2.3 总观代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from selenium.webdriver import ActionChains # 导入动作链
from selenium import webdriver
import time
import csv
import re

# 寻找关键字并登录淘宝
def search_product(key):
    driver.get('https://www.taobao.com/')
    driver.find_element_by_id('q').send_keys(key)  # 根据“检查”的id值精确定位淘宝网搜索框并传入关键字
    driver.find_element_by_class_name('btn-search').click() # 根据class标签'btn-search'定位到搜索按钮并点击

    driver.implicitly_wait(10) # 隐式等待(单位是秒) 等到页面渲染完之后就不再等待
    driver.maximize_window() # 最大化浏览器

    # 解决登陆(登录防爬:例如有滑块)
    driver.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys('这里填写账户名称/手机号码')
    time.sleep(1)
    driver.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys('这里填写账户密码')
    time.sleep(2)

    # 解决滑块
    login = driver.find_element_by_xpath('//*[@id="nc_1_n1z"]') # 通过xpath找到滑块
    action = ActionChains(driver)  # 创造出一个动作链
    action.click_and_hold(on_element=login) # 点击不松开
    action.move_by_offset(xoffset=300-42, yoffset=0) # 通过坐标轴滑动
    action.pause(0.5).release().perform() # 设置链式调用时间(滑动滑块时间),并松开鼠标   perform()执行动作链
    driver.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click() # 点击登录并重定向到前面的关键字
    driver.implicitly_wait(10) # 隐式等待

    page = driver.find_element_by_xpath('//*[@id="mainsrp-pager"]/div/div/div/div[1]').text # 获取总页数标签
    page_list = re.findall('(\d+)', page)  # 正则表达式获取多个精确数字数据[返回的是列表]
    page_num = page_list[0]   # 字符串类型数据

    return int(page_num)

# 爬取数据并保存
def get_data():
    divs = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq  "]')
    for div in divs:
        info = div.find_element_by_xpath('.//div[@class="row row-2 title"]/a').text
        price = div.find_element_by_xpath('.//strong').text
        deal = div.find_element_by_xpath('.//div[@class="deal-cnt"]').text
        shop = div.find_element_by_xpath('.//div[@class="shop"]/a').text
        print(info, price, deal, shop, sep='|')

        # 保存
        with open('data.csv', mode='a', newline="") as csvfile:
            csvWriter = csv.writer(csvfile, delimiter=',')
            csvWriter.writerow([info, price, deal, shop])

def main():
    print('正在爬取第1页数据...')
    page = search_product(keyword)
    get_data()

    # 第2页之后数据获取
    page_num = 1   # page_num * 44
    while page_num != page:
        print('*' * 100)
        print('正在爬取第{}页数据'.format(page_num+1))
        print('*' * 100)
        driver.get('https://s.taobao.com/search?q={}&s={}'.format(keyword, page_num*44))
        driver.implicitly_wait(10)  # 隐式等待
        get_data()
        page_num += 1

    driver.quit()

if __name__ == '__main__':
    driver = webdriver.Chrome('E:/software/chromedriver_win32/chromedriver.exe')
    # keyword = '电脑'
    keyword = input('请输入您要搜索的商品名字:')
    main()

总运行效果截图展示

这是PyCharm运行效果截图

这是csv文件打开后的截图

3 总结声明

最近在复习准备期末考试,7月份后我将系统写作爬虫专栏:Python网络数据爬取及分析「从入门到精通」 感兴趣的叫伙伴们可以先关注一波!

更多原创文章及分类专栏请点击此处→我的主页

★版权声明:本文为CSDN博主「荣仔!最靓的仔!」的原创文章,遵循CC 4.0 BY-SA版权协议。 转载请附上原文出处链接及本声明


欢迎留言,一起学习交流~~~

感谢阅读

END

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python爬取某宝商品数据案例:100页的价格、购买人数等数据
随着互联网时代的到来,人们更加倾向于互联网购物,某宝又是电商行业的巨头,在某宝平台中有很多商家数据,今天带大家使用python+selenium工具获取这些公开的。
松鼠爱吃饼干
2020/09/15
1.7K0
Python爬取某宝商品数据案例:100页的价格、购买人数等数据
双十一手剁完了吗?教你用Python再剁一遍(Python模拟登录,采集淘宝商品数据)
11月4日,中国消费者协会在官网发布消费提示,提醒消费者“双十一”购物六点注意事项。主要内容就是对于双十一的“低价”不可迷信,提防商家套路。那么对于我们要怎么样才能选择真正的底价好货呢?
松鼠爱吃饼干
2021/11/16
5580
双十一手剁完了吗?教你用Python再剁一遍(Python模拟登录,采集淘宝商品数据)
数据集 | 地理空间数据云30m的DEM爬取
DEM数据是我们经常用到的一种数据,小编今天就带大家一块看一下怎么用python来爬取地理空间数据云的30m的DEM数据。
GIS与遥感开发平台
2022/04/29
1.1K0
数据集 | 地理空间数据云30m的DEM爬取
爬取淘宝数据
屿.
2024/10/31
2370
Python教你挑选礼物
又到了一年一度的教师节,每次教师节大家都会烦恼不知道送什么礼物?尤其是对于理工男来说,更是一个让人头大的问题。我今天就和大家分享一个用Python爬取商品信息的项目,希望可以给大家选礼物时提供一个参考。
stormwen
2019/09/12
1.2K0
Python教你挑选礼物
用Selenium来爬取数据?真挺简单的!
于是Selenium就应运而生了,它可以算的上是自动化测试框架中的佼佼者,因为它解决了大多数用来爬取页面的模块的一个永远的痛,那就是Ajax异步加载 。今天将给大家详解如何用Selenium爬取数据,并最后附上一个真实的案例。
快学Python
2021/08/09
4.9K0
七、Selenium与phantomJS----------动态页面模拟点击、网站模拟登录 每天一个小实例1(动态页面模拟点击,并爬取你想搜索的职位信息) 每天一个小实例2(模拟网站登录)我用的是
每天一个小实例1(动态页面模拟点击,并爬取你想搜索的职位信息) 1 from selenium import webdriver 2 from bs4 import BeautifulSoup 3 4 # 调用环境变量指定的PhantomJS浏览器创建浏览器对象 5 driver = webdriver.PhantomJS() 6 7 #访问的网址,我这里是登录的boss直聘 8 driver.get('https://www.zhipin.com/') 9 10 #模拟在搜索框输入
酱紫安
2018/04/16
2.4K0
七、Selenium与phantomJS----------动态页面模拟点击、网站模拟登录
		每天一个小实例1(动态页面模拟点击,并爬取你想搜索的职位信息) 每天一个小实例2(模拟网站登录)我用的是
「Python爬虫系列讲解」八、Selenium 技术
前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达式爬虫之牛刀小试 「Python爬虫系列讲解」四、BeautifulSoup 技术 「Python爬虫系列讲解」五、用 BeautifulSoup 爬取电影信息 「Python爬虫系列讲解」六、Python 数据库知识 「Python爬虫系列讲解」七、基于数据库存储的 BeautifulSoup 招聘爬取
荣仔_最靓的仔
2021/02/02
7.8K0
「Python爬虫系列讲解」八、Selenium 技术
Python 爬取飞猪上全国景点的数据
前段时间有人找我写代码爬点东西,就是爬飞猪上全国景点的当月销量、优惠价、城市这些数据,等我写好了之后,他说不要了…
伪君子
2019/09/09
2.6K4
Python 爬取飞猪上全国景点的数据
我用 Python 分析了一波热卖年货,原来大家都在买这些东西?
今年不知道有多少小伙伴留在原地过年,虽然今年过年不能回老家,但这个年也得过,也得买年货,给家人长辈送礼。于是我出于好奇心的想法利用爬虫获取某宝数据,并结合 Python 数据分析和第三方可视化平台来分析一下大家过年都买了哪些东西,分析结果大屏如下:
程序员迪迪
2022/01/13
3540
selenium 爬取淘宝相关数据
此程序使用selenium 爬取淘宝相关数据,爬取过程需要扫码登录一下,并且最终将数据存入json文件,爬取时间大概在几分钟左右
码农GT038527
2024/09/16
2820
selenium 爬取淘宝相关数据
Python Selenium 库使用技巧
Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否能够很好得工作在不同浏览器和操作系统之上。测试系统功能——创建回归测试检验软件功能和用户需求。支持自动录制动作和自动生成 .Net、Java、Perl等不同语言的测试脚本。
王 瑞
2022/12/28
1.3K0
Python Selenium 库使用技巧
Python3网络爬虫(九):使用Selenium爬取百度文库word文章
本文通过分析网络爬虫技术的实现,探讨了如何从网络中爬取所需信息。通过使用Python的BeautifulSoup和Selenium库,可以爬取网站的内容。同时,文章还讨论了如何爬取动态加载的内容和网站,并分析了爬取效率的问题。最后,作者分享了自己在爬虫实践中的经验和教训,并指出了爬虫技术的优缺点。
Jack_Cui
2018/01/08
3.6K0
Python3网络爬虫(九):使用Selenium爬取百度文库word文章
利用 Python 爬取 QQ 空间说说和相册
QQ 空间在 2005 年被腾讯开发,已经经历了 15 个年头,在还没有微信的年代,看网友发表的心情、心事、照片大多都在 QQ 空间的里。它承载了80、90 后的大量青春,下面我们一起用 selenium 模块导出说说和相册回忆青春吧。
张俊红
2021/06/25
3.2K0
利用 Python 爬取 QQ 空间说说和相册
「Python爬虫系列讲解」十一、基于登录分析的 Selenium 微博爬虫
前文回顾: 「Python爬虫系列讲解」一、网络数据爬取概述 「Python爬虫系列讲解」二、Python知识初学 「Python爬虫系列讲解」三、正则表达式爬虫之牛刀小试 「Python爬虫系列讲解」四、BeautifulSoup 技术 「Python爬虫系列讲解」五、用 BeautifulSoup 爬取电影信息 「Python爬虫系列讲解」六、Python 数据库知识 「Python爬虫系列讲解」七、基于数据库存储的 BeautifulSoup 招聘爬取 「Python爬虫系列讲解」八、Selenium 技术 「Python爬虫系列讲解」九、用 Selenium 爬取在线百科知识 「Python爬虫系列讲解」十、基于数据库存储的 Selenium 博客爬虫
荣仔_最靓的仔
2021/02/02
2.8K0
「Python爬虫系列讲解」十一、基于登录分析的 Selenium 微博爬虫
python selenium短信轰炸代码
代码可以理解为两方面。一部分是借助python的selenium库来实现自动化与网页交互,另一部分是借助网站平台在登录时,可以通过发送手机验证码来实现,
用户9325455
2021/12/25
10.2K0
python selenium短信轰炸代码
网络爬虫 | selenium 爬取动态加载信息
使用selenium实现动态渲染页面的爬取。selenium是浏览器自动测试框架,模拟浏览器,驱动浏览器执行特定的动作,并可获取浏览器当前呈现的页面的源代码,可见即可爬。该工具支持IE浏览器、Mozilla Firefox及Google Chrome等。
数据STUDIO
2021/06/24
1.3K0
[Python私活案例]24行代码,轻松赚取400元,运用Selenium爬取39万条数据
当我们接到一个爬虫的单子时,一定要先分析思路,程序员的工作思路往往比代码更重要,思路对了,代码不会还可以查,思路错了,就只能在无尽的报错中呵呵了~~
double
2023/01/04
1.3K0
[Python私活案例]24行代码,轻松赚取400元,运用Selenium爬取39万条数据
019:Selenium操作Boss直聘进行一键职位投递
这里不是打广告,好的招聘平台有很多,Boss直聘是一个。 虽然Boss直聘上面可以跟 HR 直接沟通很实用,但是投递职位非常麻烦,需要一个一个的手动去点击,大多数沟通了还没有反应。 所以我今天就用 Selenium + Python 写了一个自动沟通的脚本。 写的时候发现,Boss直聘上面反 Selenium 措施也是很到位的。
李玺
2021/11/22
3.3K6
019:Selenium操作Boss直聘进行一键职位投递
Python爬虫技术系列-04Selenium库的使用
针对119.0.x的版本驱动需要在 https://googlechromelabs.github.io/chrome-for-testing/ 中下载
IT从业者张某某
2023/11/07
1.4K0
Python爬虫技术系列-04Selenium库的使用
推荐阅读
相关推荐
Python爬取某宝商品数据案例:100页的价格、购买人数等数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验