网站托管内容,手机网站和电脑网站的区别,做ppt做好的网站,wordpress可以做什么站当程序打开淘宝登陆页面后#xff0c;需要快速手动登录淘宝#xff0c;如果服务报错#xff0c;需要重新登录#xff01;
pip安装库 pip install pyquery pip install selenium pip install openpyxl # 代码说明#xff1a;代码功能#xff1a; 基于ChromeDriver爬取tao…当程序打开淘宝登陆页面后需要快速手动登录淘宝如果服务报错需要重新登录
pip安装库 pip install pyquery pip install selenium pip install openpyxl # 代码说明代码功能 基于ChromeDriver爬取taobao淘宝平台商品列表数据
输入参数: KEYWORLD -- 搜索商品“关键词”pageStart -- 爬取起始页pageEnd -- 爬取终止页
输出文件爬取商品列表数据Page 页码Num 序号title 商品标题Price 商品价格Deal 商品销量Location 地理位置Shop 商品IsPostFree 是否包邮Title_URL 商品详细页链接Shop_URL 商铺链接Img_URL 图片链接# 声明第三方库/头文件
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from pyquery import PyQuery as pq
import time
import openpyxl as op #导入Excel读写库# 全局变量
count 1 # 写入Excel商品计数
KEYWORD input(输入搜索的商品关键词Keyword)# 要搜索的商品的关键词
pageStart int(input(输入爬取的起始页PageStart))# 爬取起始页
pageEnd int(input(输入爬取的终止页PageEnd))# 爬取终止页# 启动ChromeDriver服务
options webdriver.ChromeOptions()
# 关闭自动测试状态显示 // 会导致浏览器报请停用开发者模式
options.add_experimental_option(excludeSwitches, [enable-automation])
# 把chrome设为selenium驱动的浏览器代理
driver webdriver.Chrome(optionsoptions)
# 反爬机制
driver.execute_cdp_cmd(Page.addScriptToEvaluateOnNewDocument,{source: Object.defineProperty(navigator, webdriver, {get: () undefined})})
driver.get(https://www.taobao.com)
# 窗口最大化
driver.maximize_window()
# wait是Selenium中的一个等待类用于在特定条件满足之前等待一定的时间(这里是15秒)。
# 如果一直到等待时间都没满足则会捕获TimeoutException异常
wait WebDriverWait(driver,10)
# 打开页面后会强制停止10秒请在此时手动扫码登陆# 输入“关键词”搜索
def search_goods(KEYWORD):try:print(正在搜索: {}.format(KEYWORD))# 找到搜索“输入框”input wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, #q)))# 找到“搜索”按钮submit wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, #J_TSearchForm div.search-button button)))# 输入框写入“关键词KeyWord”input.send_keys(KEYWORD)# 点击“搜索”按键submit.click()# 搜索商品后会再强制停止2秒如有滑块请手动操作time.sleep(2)print(搜索完成)except Exception as exc:print(search_goods函数错误)# 翻页至第pageStar页
def turn_pageStart():try:print(正在翻转:第{}页.format(pageStart))# 滑动到页面底端driver.execute_script(window.scrollTo(0, document.body.scrollHeight);)# 滑动到底部后停留3stime.sleep(3)# 找到输入“页面”的表单输入“起始页” 请输入跳转到第几页pageInput wait.until(EC.presence_of_element_located((By.XPATH, //*[idsearch-content-leftWrap]/div[2]/div[4]/div/div/span[3]/input)))pageInput.send_keys(pageStart)# 找到页面跳转的“确定”按钮并且点击admit wait.until(EC.element_to_be_clickable((By.XPATH, //*[idsearch-content-leftWrap]/div[2]/div[4]/div/div/button[3])))admit.click()print(已翻至:第{}页.format(pageStart))except Exception as exc:print(turn_pageStart函数错误)# 获取每一页的商品信息
def get_goods(page):try:# 声明全局变量countglobal countif input(确认界面加载完毕输入数字“1”开始爬取--) 1:pass# 获取html网页html driver.page_sourcedoc pq(html)# 提取所有商品的共同父元素的类选择器items doc(div.content--CUnfXXxv div div).items()for item in items:# 定位商品标题title item.find(.title--qJ7Xg_90 span).text()# 定位价格price_int item.find(.priceInt--yqqZMJ5a).text()price_float item.find(.priceFloat--XpixvyQ1).text()if price_int and price_float:price float(f{price_int}{price_float})else:price 0.0# 定位交易量deal item.find(.realSales--XZJiepmt).text()# 定位所在地信息location item.find(.procity--wlcT2xH9 span).text()# 定位店名shop item.find(.shopNameText--DmtlsDKm).text()# 定位包邮的位置postText item.find(.subIconWrapper--Vl8zAdQn).text()postText 包邮 if 包邮 in postText else /# 定位商品urlt_url item.find(.doubleCardWrapperAdapt--mEcC7olq)t_url t_url.attr(href)# t_url item.attr(a.doubleCardWrapperAdapt--mEcC7olq href)# 定位店名urlshop_url item.find(.TextAndPic--grkZAtsC a)shop_url shop_url.attr(href)# 定位商品图片urlimg item.find(.mainPicAdaptWrapper--V_ayd2hD img)img_url img.attr(src)# 定位风格style_list item(div.abstractWrapper--whLX5va5 div).items()style []for s in style_list:s_span s(div.descBox--RunOO4S3 span).text()if s_span ! :style.append(s_span)# 构建商品信息字典product {Page: page,Num: count-1,title: title,price: price,deal: deal,location: location,shop: shop,isPostFree: postText,url: t_url,shop_url: shop_url,img_url: img_url}print(product)# 商品信息写入Excel表格中wb.cell(rowcount, column1, valuepage) # 页码wb.cell(rowcount, column2, valuecount-1) # 序号wb.cell(rowcount, column3, valuetitle) # 标题wb.cell(rowcount, column4, valueprice) # 价格wb.cell(rowcount, column5, valuedeal) # 付款人数wb.cell(rowcount, column6, valuelocation) # 地理位置wb.cell(rowcount, column7, valueshop) # 店铺名称wb.cell(rowcount, column8, valuepostText) # 是否包邮wb.cell(rowcount, column9, valuet_url) # 商品链接wb.cell(rowcount, column10, valueshop_url) # 商铺链接wb.cell(rowcount, column11, valueimg_url) # 图片链接for i in range(0,len(style)):wb.cell(rowcount, column12i, valuestyle[i]) # 风格1~3count 1 # 下一行except Exception:print(get_goods函数错误)# 翻页函数
def page_turning(page_number):try:print(正在翻页: 第{}页.format(page_number))# 强制等待2秒后翻页time.sleep(2)# 找到“下一页”的按钮submit wait.until(EC.element_to_be_clickable((By.XPATH, //*[idsearch-content-leftWrap]/div[2]/div[4]/div/div/button[2])))submit.click()# 判断页数是否相等wait.until(EC.text_to_be_present_in_element((By.XPATH, //*[idsearch-content-leftWrap]/div[2]/div[4]/div/div/span[1]/em), str(page_number)))print(已翻至: 第{}页.format(page_number))except Exception as exc:print(page_turning函数错误)# 爬虫main函数
def Crawer_main():try:# 搜索KEYWORDsearch_goods(KEYWORD)# 判断pageStart是否为第1页if pageStart ! 1:turn_pageStart()# 爬取PageStart的商品信息get_goods(pageStart)# 从PageStart1爬取到PageEndif pageStart 1 pageEnd:for i in range(pageStart 1, pageEnd):page_turning(i)get_goods(i)else:returnexcept Exception as exc:print(Crawer_main函数错误)if __name__ __main__:# 建立Excel表格try:ws op.Workbook() # 创建Workbookwb ws.create_sheet(index0) # 创建worsheet# Excel第一行表头title_list [Page, Num, title, Price, Deal, Location, Shop, IsPostFree, Title_URL,Shop_URL, Img_URL, Style_1, Style_2, Style_3]for i in range(0, len(title_list)):wb.cell(rowcount, columni 1, valuetitle_list[i])count 1 # 从第二行开始写爬取数据print(Excel建立)except Exception as exc:print(Excel建立失败)# 开始爬取数据Crawer_main()# 保存Excel表格data time.strftime(%Y%m%d-%H%M, time.localtime(time.time()))Filename {}_No.{}~{}_{}_FromTB.xlsx.format(KEYWORD,pageStart,pageEnd,data)ws.save(filename Filename)print(Filename 存储成功~)