1、成果展示
开始运行后,程序自己打开浏览器
根据用户代码中的账号密码模拟登录
提示输入搜索内容
输入内容以及页数
回车后浏览器自动跳转爬取内容
提示爬取成功
在改文件目录下存放为Excel文件形式
2、完整代码
import time
from selenium import webdriver
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from openpyxl import Workbook
def taobao():
# 创建 EdgeOptions 对象
option = webdriver.EdgeOptions()
# 添加排除选项,避免被识别为自动化程序
option.add_experimental_option('excludeSwitches', ['enable-automation'])
# 创建 edge WebDriver
driver = webdriver.Edge(options=option)
# 执行 JavaScript 代码,修改 navigator.webdriver 属性,防止浏览器被识别为自动化程序
driver.execute_cdp_cmd('Page.addScriptToEvaluateOnNewDocument', {
'source': 'Object.defineProperty(navigator, "webdriver", {get: () => undefined})'
})
# 打开淘宝登录页面
driver.get("https://login.taobao.com/member/login.jhtml")
# fm-login-id
# 等待3秒,确保页面加载完成
time.sleep(1)
driver.find_element(By.ID, 'fm-login-id').click()
time.sleep(1)
driver.find_element(By.ID, 'fm-login-id').send_keys('150*********')#更改为你的淘宝登录账号
time.sleep(1)
driver.find_element(By.ID, 'fm-login-password').click()
time.sleep(1)
driver.find_element(By.ID, 'fm-login-password').send_keys('***************')#更改为你的淘宝登录密码
time.sleep(1)
# 点击登录按钮
login_button = driver.find_element(By.CLASS_NAME, 'login-form > div.fm-btn > button')
# login-form > div.fm-btn > button
login_button.click()
# 等待5秒,确保登录成功
time.sleep(8)
# login-form > div.fm-btn > button
# fm-login-password
# 搜索商品并获取页面内容
things = input("输入要找的东西:")
page = int(input("页数:"))
wb = Workbook()
# 创作工作表
ws = wb.active
# 设置单元格列宽
ws.column_dimensions['A'].width = 108 # 设置第一列(列 A)的宽度为 108
# 添加表头
ws.append(["商品", "单价", "店铺"])
for p in range(page):
url = f"https://s.taobao.com/search?page={p + 1}&q={things}"
#https://s.taobao.com/search?page=1&q=%E8%A1%A3%E6%9C%8D&tab=all
driver.get(url)
time.sleep(5) # 等待页面加载完成
soup = BeautifulSoup(driver.page_source, 'html.parser').find_all(attrs={"class": "Card--doubleCardWrapper--L2XFE73"})
# print(soup)
last_list = []
for np in soup:
excel_list = []
name = np.find(attrs={"class": "Title--title--jCOPvpf"}).get_text()
# print(name)
excel_list.append(name)
price = "¥" + np.find(attrs={"class": "Price--priceInt--ZlsSi_M"}).get_text()
excel_list.append(price)
shop = np.find(attrs={"class": "ShopInfo--shopName--rg6mGmy"}).get_text()
excel_list.append(shop)
last_list.append(excel_list)
for i in last_list:
ws.append(i)
wb.save("淘宝.xlsx")
print("已完成")
# 关闭浏览器
driver.quit()
taobao()