爬虫进阶实战(selinum爬取淘宝商品类目)
本文所属专栏:爬虫方法论 - DaveCui的专栏 - 掘金 (juejin.cn) 专栏记录了我本人在工作室接爬虫单的几个经典的真实案例,干货满满,这可是吃饭的家伙,还不关注一波。
专栏历史文章: 爬虫入门实战(标价400的单子-1) - 掘金 (juejin.cn) 爬虫入门实战(标价400的单子-2) - 掘金 (juejin.cn) 爬虫进阶实战(标价1000的单子) - 掘金 (juejin.cn)
前言
这个单子给我深刻的教训就是不要随便接软件开发的活。因为软件开发的话需求就太多了,给我整的心力交瘁的。它不像单纯的数据爬取任务,人甲方只要你数据准确全面即可。
而且最重要的是,他么的最后他不满意,然后尾款没结。
项目需求
这个单子标价800。需求也比较常见,爬淘宝的SKU,要求就是输入商铺链接,爬取下所有的SKU,还要求促销价。并且要求做一个界面出来。我用PyQt5做了个大致如下的界面。
功能演示如下:
这个任务的要去爬出来指定淘宝或天猫链接内sku的价格和优惠价格,这个爬虫最常用的就是selinum直接爬下来。
一、下载seleinum的谷歌webdriver驱动
首先查看自己的谷歌浏览器的版本

在chromedriver.storage.googleapis.com找对应版本的webdriver.放在你的工程目录中就行。
二、selenium绕过淘宝的身份验证
这里我尝试了N多方法,但是能够稳定通过的还是得靠手动扫码通过。这个绕过去的方法应该是有优化的,但是我尝试了我查到的方法全部没成功哈。
可能这也是老板没结尾款的原因吧,但我真心觉得加个扫码的步骤也不是多麻烦的事,毕竟是单独对应一个链接操作一次的嘛。
实现方法也比较简单,打开做个60秒的延迟判定,主要就是给你扫码留一段时间。
browser = webdriver.Chrome()
browser.implicitly_wait(60)
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
{"source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})
browser.get('https://item.taobao.com/item.htm?spm=2013.1.20141001.1.6beb5273VJs5lY&id=39211103460')# 进入指定链接
browser.maximize_window()#浏览器窗口最大化
browser.find_element(By.XPATH, '//*[@id="login"]/div[1]/i').click() # 点击右上角转换扫码登录
price=browser.find_element(By.ID, "J_PromoPriceNum") # 没登录进去,找不到这个价格数据会等60秒。
三、爬取价格信息
整体编程思路就是获取全部的元素列表,然后遍历。因为价格和优惠价格信息需要点击才能获取到,所以还需要在遍历时加入点击操作。
def get_conceal_text(element):
js = "return arguments[0].textContent"
return browser.execute_script(js, element)
elements=browser.find_elements(By.XPATH, '//*[@id="J_isku"]/div/dl[1]/dd/ul/li')
print(elements)
with open('result.csv','w',encoding='utf-8',newline='') as f:
writer=csv.writer(f)
writer.writerow(['SKU名称','SKU价格','促销价格'])
for element in elements:
try:
row = []
name=get_conceal_text(element).replace(' ','').replace('\n','').replace('已选中','')
row.append(name)
element.click()
prices = browser.find_elements(By.CLASS_NAME, "tb-rmb-num")
for price in prices:
row.append(price.text)
writer.writerow(row)
print('\t'.join(row))
except:
print('————————————访问出错!!!——————————————————')
四、GUI封装
最后用PyQt5做个GUI的封装。需要的可以自取。下载好第三方库,直接运行gui.py即可。
如果只想看爬虫思路的话,看tmao和taobao这两个py文件即可。
附录:Selenium基础用法
1.Selenium 的简介
Selenium 是一个用于 Web 应用程序自动化测试的工具,最初是为网站自动化测试而开发的。Selenium 自己不带浏览器,不支持浏览器的功能,它需要与第三方浏览器结合在一起才能使用。它支持所有主流的浏览器(包括 IE、Firefox、Safari、Chrome、Opera 等)。可以使用它对浏览器进行各种各样的模拟操作,包括爬取一些网页内容。
2.Selenium 的基本流程
Selenium 爬虫是一种利用 Selenium 工具模拟浏览器操作来抓取网页数据的方法。Selenium 爬虫的基本流程如下:
- 安装 Python 环境、Selenium 库和对应浏览器的 WebDriver。
- 创建一个 WebDriver 对象,用于控制浏览器。
- 打开目标网页,等待页面加载完成。
- 定位需要抓取的元素,使用不同的定位方式,如 id、name、class name、xpath、css selector 等。
- 对元素进行操作,如点击、输入、滚动等,模拟用户行为。
- 提取元素的文本或属性,如链接、图片、视频等,保存到本地或数据库。
- 关闭浏览器,释放资源。
下面是一个简单的示例,使用 Selenium 爬虫抓取百度首页的搜索结果:
3.Selenium 的基础用法
要使用 Selenium,首先需要安装 Python 环境和 Selenium 库,以及对应浏览器的 WebDriver。WebDriver 是一个用于控制浏览器的驱动程序,需要和浏览器的版本对应,否则可能出现兼容性问题。WebDriver 的下载地址可以在 这里 查找或者自己搜索。
安装好 WebDriver 后,可以将其放到 Python 的 Scripts 目录下,或者在使用时指定其路径。然后就可以通过 Python 代码来控制浏览器了。下面是一个简单的示例:
好的,我会尝试为你总结 selenium 爬虫的基本流程。请看下面的内容,希望对你有帮助。
4.Selenium 的基本案例
下面是一些使用 Selenium 的基本案例,展示了如何进行元素定位、窗口切换、frame 切换、鼠标操作等常用功能。
这个案例和上面的示例类似,只是使用了不同的元素定位方式。Selenium 提供了多种元素定位方式,包括 id、name、class name、tag name、link text、partial link text、xpath 和 css selector 等。具体可以参考 这里。
from selenium import webdriver
# 创建一个 ChromeDriver 对象
browser = webdriver.Chrome()
# 打开百度首页
browser.get('http://www.baidu.com/')
# 使用 xpath 定位方式找到搜索框元素
input = browser.find_element_by_xpath('//*[@id="kw"]')
# 输入关键词
input.send_keys('selenium')
# 使用 xpath 定位方式找到搜索按钮元素
button = browser.find_element_by_xpath('//*[@id="su"]')
# 点击按钮
button.click()
# 关闭浏览器
browser.close()
# 等待页面加载完成
browser.implicitly_wait(10)
# 找到搜索结果元素,使用 xpath 定位方式
results = browser.find_elements_by_xpath('//div[@id="content_left"]/div/h3/a')
# 遍历结果,打印标题和链接
for result in results:
title = result.text
link = result.get_attribute('href')
print(title, link)
# 关闭浏览器
browser.close()
转载自:https://juejin.cn/post/7248888621364117563