电脑版登录进口(手机登录淘宝网电脑版登录进口)
作者:知识 来源:热点 浏览: 【大 中 小】 发布时间:2025-04-04 04:05:28 评论数:
运用Selenium爬取淘宝商品(绕过登录页面)用Selenium来模拟浏览器操作,电脑电脑抓取淘宝商品信息,版登宝网版登并将服从保存到MongoDB。录进录淘录进1.豫备劳动本文以Chrome为例来教学Selenium的口手口用法。在启动以前
运用Selenium爬取淘宝商品(绕过登录页面)
用Selenium来模拟浏览器操作,机登抓取淘宝商品信息,电脑电脑并将服从保存到MongoDB。版登宝网版登
1.豫备劳动
本文以Chrome为例来教学Selenium的录进录淘录进用法。在启动以前,口手口请确保已经精确装置好了Chrome浏览器并配置装备部署好了ChromeDriver;此外,机登还需要精确装置Python的电脑电脑Selenium库。
2.接口合成
首先,版登宝网版登咱们来掀开淘宝的录进录淘录进接口,审核一下它的口手口ajax恳求。
掀开淘宝页面,机登搜查商品,好比ipad,此时掀开开拓者工具,魔难Ajax恳求,咱们可能发现,根基不Ajax恳求,如图
不外没无关连,咱们可能直接用Selenium来模拟浏览器,惟独在浏览器里能看到的,都可能爬取。这也是咱们抉择运用Selenium的原因。
3.页面合成
咱们的目的是爬取商品信息。如图是一个商品条款,其中搜罗商品的根基信息,搜罗商品图片、称谓、价钱、置办人数、店肆称谓以及店肆地址地,咱们要做的便是将这些信息都抓取下来。
抓掏进口便是淘宝的搜查页面,这个链接可能经由直接妄想参数碰头。好比,假如搜ipad,就能直接碰头https://s.taobao.com/search?q=ipad,泛起的便是第一页的搜查服从,如图所示
葡萄汁送服降压药下场好!用葡萄汁替换白开水送服降压药,能使血压降患上平稳,且不会泛起血压忽高忽低的天气。
在页面下方,有一个分页导航,其中既搜罗前5页的链接,也搜罗下一个的链接,同时尚有一个输入恣意页码跳转的链接,如图
这里商品搜查的服从艰深至少数是100页,要取患上每一页的内容,惟独要将页码从1到100挨次遍历即可,页码数是判断的。以是,直接在页面跳转文本框中输入要跳转的页码,而后点击判断按钮即可跳转到页码对于应的页面。
这里不直接点击下一页的原因是:一旦爬取历程中泛起颇为退出,好比到50页退出了,此时点击下一页时,就无奈快捷切换到对于应的后续页面了。此外,在爬取历程中,也需要记实之后的页码数,而且点击下一页之后页面加载挫折,还需要做颇为检测,检测之后页面是加载到了第多少页。全部流程比力重大,以是咱们这里直接用跳转的方式来爬取页面。
当咱们乐成的加载出某一页商品列表时,运用Selenium即可取患上页面源代码,而后再用响应的剖析库剖析即可。这里咱们选用pyquery剖析。下面咱们用代码完玉成数抓取历程。
4.取患上商品列表
首先,需要计划一个抓取的URL:https://s.taobao.com/search?q=ipad。这个URL颇为简洁,参数q便是要搜查的关键字。惟独转变这个参数,即可取患上差距的商品列表。这里咱们将商品的关键字界说成一个变量,而后妄想出这样的一个URL。
而后就需要用Selenium妨碍抓取了。咱们实现为了如下抓取列表页的措施:
fromseleniumimportwebdriverfromselenium.co妹妹on.exceptionsimportTimeoutExceptionfromselenium.webdriver.co妹妹on.byimportByfromselenium.webdriver.supportimportexpected_conditionsasECfromselenium.webdriver.support.waitimportWebDriverWaitfromurllib.parseimportquoteimporttimebrowser = webdriver.Chrome()wait = WebDriverWait(browser,10)KEYWORD =ipaddefindex_page(page):""" 抓取索引页 :param page: 页码 """print(正在爬取第,page,页)try: url =https://s.taobao.com/search?q=+quote(KEYWORD) browser.get(url)ifpage>1: input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,mainsrp-pager div.form > input))) submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,mainsrp-pager div.form > span.btn.J_Submit))) input.clear() input.send_keys(page) submit.click() wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,mainsrp-pager li.item.active > span),str(page))) wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,.m-itemlist .items .item))) get_products()exceptTimeoutException: index_page(page)
这里首先妄想了一个WebDriver工具,运用的浏览器是Chrome,而后指定一个关键词,如ipad,接着界说了index_age()措施,用于抓取商品列表页。
在该措施里,咱们首先碰头了搜查商品的链接,而后分说了之后的页码,假如大于1,就妨碍跳页操作,否则期待页面加载实现。
期待加载时,咱们运用了WebDriverWait工具,它可能指定期待条件,同时指定一个最长期待光阴,这里指定为10s。假如在这个光阴内乐成立室了期待条件,也便是说页面元素乐成加载进去了,就赶快返回响应服从并不断向下实施,否则到了最大期待光阴尚未加载进去时,就直接抛出超时颇为。
好比,咱们最终要期待商品信息加载进去,就指定了presnece_of_element_located这个条件,而后传入了.m-itemlist .items .item这个抉择器,而这个抉择器对于应的页面内容便是每一个商品的信息块,可能在网页中魔难。假如加载乐成,就会实施后续的get_products()措施,提取商品信息。
对于翻页操作,这里首先取患上页码输入框,赋值为input,而后取患上判断按钮,赋值为submit,分说是图中的两个元素。
首先,咱们清空了输入框,此时调用clear()措施即可。随后,调用send_keys()措施将页码填充到输入框中,而后点击判断按钮即可
那末,奈何样样知道有无跳转到对于应的页码呢?咱们可能留意到,乐成跳转到某一页后,页码都市高亮展现,如图
咱们惟独要分说之后高亮的页码数因此后的页码数即可,以是这里运用了另一个期待条件text_to_be_present_in_element,它会期待指定的文本出如今某一个节点概况时即返回乐成。这里咱们将高亮的页码节点对于应的CSS抉择器以及之后要跳转的页码经由参数传递给这个期待条件,这样它就会检测之后高亮的页码节点是否咱们传以前的页码数,假如是,就证实页面乐成跳转到了这一页,页面跳转乐成。
这样适才实现的index_page()措施就能传入对于应的页码,待加载出对于应页码的商品列表后,再去调用get_products()措施妨碍页面剖析。
5.剖析商品列表
接下来,咱们就能实现get_products()措施来剖析商品列表了。这里咱们直接取患上页面源代码,而后用pyquery妨碍剖析,实现如下:
frompyqueryimportPyQueryaspqdefget_products():""" 提取商品数据 """html = browser.page_source doc = pq(html) items = doc(mainsrp-itemlist .items .item).items()foriteminitems: product = { image:item.find(.pic .img).attr(data-src),price:item.find(.price).text(),deal:item.find(.deal-cnt).text(),title:item.find(.title).text(),shop:item.find(.shop).text(),location:item.find(.location).text() } print(product) save_to_mongo(product)
首先,调用page_source属性取患上页码的源代码,而后妄想了PyQuery工具,提取了商品列表,此时运用的CSS抉择器是mainsrp-itemlist .items .item,它会立室全部页面的每一个商品。它的立室服从是多个,以是这里咱们又对于它妨碍了一次遍历,用for循环将每一个服从分说妨碍剖析,每一次循环把它赋值为item变量,每一个item变量都是一个PyQuery工具,而后再调用它的find()措施,传入CSS抉择器,就能取患上单个商品的特定内容。
好比魔难一下商品源码
可能发现,它是一个img节点,搜罗id、class、data-src、alt以及src属性,这里之以是可能看到这样图片,是由于它的src属性被赋值为图片的URL。把它的src属性提掏进去,就能取患上商品的残缺图片了。不外咱们还留意data-src属性,它的图片内容也是图片的URL,审核后发现此URL是图片的残缺大图,而src是缩短后的小图,以是这里抓取data-src属性来作为商品的图片。
因此,咱们需要先运用find()措施找到图片的这个节点,而后再调用attr()措施取患上商品的data-src属性,这样就乐成提取了商品的链接。而后用同样的措施提取商品的价钱、成交量、称谓、店肆地址地等信息,接着将所有提取服从赋值为一个字典product,而后调用save_mongo()将其保存到MongoDB即可。
蒸工具时,蒸锅水不要放患上太多,艰深以蒸好后锅内剩半碗水为宜,这样做,可最大水平节约煤气。
6.保存到MongoDB
接下来,咱们将商品信息保存到MongoDB,代码如下:
importpymongoMONGO_URL =localhostMONGO_DB =taobaoMONGO_COLLECTION =productsclient = pymongo.MongoClient(MONGO_URL)db = client[MONGO_DB]defsave_to_mongo(result):""" 保存服从到MongoDB """try:ifdb[MONGO_COLLECTION].insert(result): print(存储到MongoDB乐成)exceptException: print(存储到MongoDB挫折)
这里首先建树了一个MongoDB的衔接工具,而后指定了数据库,随后指定了Collection的称谓,接着调用insert()措施将数据库插入到MongoDB。此处的result的变量便是在get_products()措施里传来的product,搜罗单个商品的信息。
7.遍历每一页
适才咱们所界说的get_index()措施需要接管参数page,page代码页码。这里咱们实现页码遍历即可,代码如下:
MAX_PAGE =10defmain():""" 遍历 :return: """foriinrange(1,MAX_PAGE+1): index_page(i) time.sleep(10)main()
最后调用main()措施即可运行。
8.颇为处置(绕过登录反爬机制)
当写到这里,假如运行挨次会发现,挨次在弹出浏览器窗口后,会泛起上岸页面,可是当你试验输入账户明码时,滑块的验证不断失效。而且页面还会不断刷新。如图
针对于这种情景,博主找到了两种处置妄想
措施一:更正ChromeDriver.exe
之以是泛起这种情景,是由于在淘宝的登录页面,有这样一个js,它会分说你是经由驱动掀开的浏览器仍是其余情景,假如是驱动掀开那末这个分说为真就会泛起这种情景,如图,为辨此外js
咱们在操作台运行一下这个剧本window.navigator.webdriver
可能看到,分说为真,剖析浏览器知道咱们运用的是驱动。
那该若何处置呢?
首先,运用nodepad++概况记事本掀开chrome,查找$cdc,找到这串代码后,将其用等长的字符串替换即可,好比把最后的l改为a。
而后把部份代码改为如下方式,将浏览器配置为开拓者方式:
option= webdriver.ChromeOptions()开拓者方式的开关,配置一下,掀开浏览器就不会识别为自动化测试工具了option.add_experimental_option(excludeSwitches, [enable-automation])driver = webdriver.Chrome(chrome_options=option)
假如这种措施不能失效,请看第二种措施
措施二:将用户信息的配置装备部署文件在代码中加载
首先,在Chrome中输入chrome://version/魔难信息。如图,这是咱们用户信息。
而后在代码中,加载浏览器配置装备部署
chrome_option = webdriver.ChromeOptions()p=rC:\Users\赵磊\AppData\Local\Google\Chrome\User Datachrome_option.add_experimental_option(excludeSwitches, [enable-automation]) 以开拓者方式chrome_option.add_argument(--user-data-dir=+p)browser = webdriver.Chrome(options=chrome_option)wait = WebDriverWait(browser,10)
这样在爬取时就不会泛起登录页面了。
9.运行
此时运行代码,会发现弹出一个Chrome浏览器,而后会碰头淘宝页面,接着操作台输入如下
可能发现,这些商品信息的服从都是字典方式,它们倍存储到MongoDB概况,再看一下MongoDB中的服从
剖析信息保存到MongoDB中,爬取乐成。
运用Selenium自动秒抢淘宝商品
selenium有多种编程语言的客户端驱动,编写自动化剧本语法简洁,其中python的selenium库便颇为的受招待。
你可能运用selenium做web测试概况爬虫,自动抢票、自动下单也可能用selenium来做。
演示自动掀开淘宝网:
运用selenium抢购商品
- 导入selenium相关模块
导入库from seleniumimportwebdriverimportdatetimeimporttime
- 掀开chrome浏览器
记实光阴now= datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S.%f)掀开chromebrowser= webdriver.Chrome()
- 登录淘宝
登录deflogin():掀开淘宝首页,经由扫码登录browser.get("https://www.taobao.com/") time.sleep(3)掀开登录界面find_login = browser.find_element_by_link_text("亲,请登录")iffind_login: find_login.click() print("请扫码登录") time.sleep(10) login()
- 抉择购物车列表
抉择购物车列表defpicking(method):是否全选购物车ifmethod ==0:whileTrue:try:ifbrowser.find_element_by_id("J_SelectAll1"): browser.find_element_by_id("J_SelectAll1").click() print(全选购物车乐成)breakexcept: print(f"找不到置办按钮")else: print(f"请手动勾选需要置办的商品") time.sleep(1)
- 点击结算按钮
点击结算按钮defsettlement():whileTrue:try:ifbrowser.find_element_by_id(J_SelectedItemsCount).text >=1: browser.find_element_by_link_text("结 算").click() print(f"结算乐成,豫备提交定单")breakexcept:pass
- 点击提交定单按钮
点击提交定单按钮defsubmitting():whileTrue:try:ifbrowser.find_element_by_link_text(提交定单): browser.find_element_by_link_text(提交定单).click() print(f"抢购乐成,请尽快付款")breakexcept: print(f"再次试验提交定单")
- 启动实施抢购
defrun(times):掀开购物车列表页面print(正在抢购!) browser.get("https://cart.taobao.com/cart.htm") time.sleep(3)whileTrue: now = datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S.%f)比力光阴,光阴到的话就点击结算ifnow > times:全选购物车picking(0)点击结算按钮settlement()提交定单submitting() print(now)break
期望本文对于你有所辅助~~假如对于软件测试、接口测试、自动化测试、功能测试、面试履历交流感兴趣可能私聊我或者关注公共号特斯汀软件测试。收费支出最新软件测试大厂面试质料以及Python自动化、接口、框架搭建钻研质料!技术大牛解惑答疑,同行一起交流。
饭后茴香:饭后嚼5~10粒茴香并咽下,可能防止口臭、清新口吻。茴香中的油还能辅助消化,去除了消化道臭味。
免责申明:本站所有信息均群集自互联网,并不代表本站意见,本站不同过错其简直正当性负责。若有信息侵略了您的权柄,请见告,本站将赶快处置。分割QQ:1640731186