【Python爬虫】:使用「Selenium」+「Chromedriver」爬僵尸链接

任佳伟 任佳伟 4个月前 0 3 2004
摘要:技术干货一样不少


使用「Selenium」+「Chromedriver」爬僵尸链接


     在往期的文章中有读者朋友提问能否爬「僵尸链接」,肯定是可以的。只有你看不到,没有爬虫爬不了的。


使用本文今天将讲到的「Selenium」+「Chromedriver」就可以轻松完成。本文还是会从环境搭建、查找僵尸链接原理到代码编写一步步来实现这个需求。


Selenium原本是一套完整的web应用程序测试系统,现也用作爬虫。用户可以使用它驱动浏览器,使浏览器按照已编写完成的代码完成相应动作。


Selenium支持驱动Chrome、Firefox、IE等一系列浏览器,在这里我还是选用大家熟悉的Chrome浏览器。



环境搭建步骤:



一、安装Selenium


在上一期已搭建Python环境的前提下打开CMD窗口,输入: pip install selenium」会自动安装selenium,如无报错,且提示安装成功,则成功安装selenium


可以通过以下方式验证是否安装成功并且能正常使用:

CMD窗口中输入python,再输入from selenium import webdriver,敲击回车。如果没有报错,则selenium成功安装且能正常使用。



二、下载Chromedriver


首先从https://www.google.cn/chrome/下载最新版Chrome浏览器,再从http://chromedriver.storage.googleapis.com/index.htm 下载最新版的Chromedriver


若你已经安装了Chrome浏览器,可根据已安装的Chrome浏览器版本下载对应的Chromedriver版本。附ChromeChromedriver的对应关系表:

Chrome浏览器和Chromedriver都下载完成后,将Chrome浏览器安装好,将Chromedriver解压放在自己喜欢的地方待用。



查找原理:


在搜索引擎中使用「site」关键字,可以把搜索范围限定在特定站点中,如site:某某.com。“site:”后面跟的站点域名,不要带“http://”;site:后面带不带www结果可能是不一样的,因为有些域名还包括二级域名,如:site:www.某某.com和site:某某.com,搜索结果就不一样;另外,site:和站点名之间,不要带空格。


我们可以用「site:amazon.com」,只查找在亚马逊网站内的信息。

而一个僵尸链接必有下图特征:


那我们需要构建一个完整的搜索关键字使用Google就可以帮我们找出亚马逊中的僵尸链接。如我需要找「Nike」的僵尸链接,则使用「site:amazon.com Nike Currently unavailable.」使用Google搜索即可。


但其中某些搜索结果,并不是我们想要的僵尸链接。这就需要我们的爬虫去遍历每个搜索结果,并返回正确的僵尸链接。



代码编写:


打开Pycharm,新建项目:

从selenium导入webdriver:

from selenium import webdriver


准备好搜索链接:


url = 'https://www.google.com/search?q=site%EF%BC%9Aamazon.com+Nike+Currently+unavailable.'

        


driver = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
#
在webdriver.Chrome(中填入之前下载好的Chromedrive的路径)
driver.get(url)
 

        


将自动打开Chrome浏览器并访问:

https://www.google.com/search?q=site%EF%BC%9Aamazon.com+Nike+Currently+unavailable.


若浏览器出现「Chrome 正受到自动测试软件的控制。」则表示我们已成功使用selenium驱动Chrome并按照预设访问了Google。


分析Google搜索结果页面,在搜索结果页面按F12。通过分析网页源码,可以看出每个搜索结果都包含在一个class为rc的<div>标签内:


我们可以使用「XPath」来查看是否通过查找所有的class为rc的<div>标签即可找到所有搜索结果。首先下载Chrome插件「XPath Helper」:


在搜索结果页面打开「XPath Helper」,输入「//div[@class='rc']」,显示「RESULTS (20)」及表示有20个class为rc的<div>标签,这与页面中的20个搜索结果相符,这表示可以使用该XPath找出页面中共有多少个搜索结果。



再按照下图分别点击1、2定位某条搜索结果的标题:


在第三步上点击鼠标右键→「Copy」→「Copy XPath」


这里要科普一下,「XPath」是XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言。使用XPath我们可以准确定位页面中某个元素的位置。


多拷贝几个搜索结果的XPath,可以找出其中的规律:

可见只需将XPath略微修改即可准确定位每个搜索结果的标题,那我们就可以继续敲代码了。


首先查找所有的class为rc的<div>标签,并计算其长度。


all_rc = driver.find_elements_by_xpath("//div[@class='rc']") # 查找所有的class为rc的<div>标签
len_all_rc =
len(all_rc) # len()可计算其长度


根据所有的class为rc的<div>标签的长度,生成新的XPath并定位、点击,即跳转至亚马逊商品页面。


# for X in range () 是前开后闭,所以需要len_all_rc + 1 才能循环len_all_rc次。
for i in range(1, len_all_rc + 1):
    #
拼接新的XPath
xpath = "//*[@id='rso']/div/div/div["+str(i)+"]/div/div/h3/a"
# 根据XPath定位搜索结果的标题,并点击
   
driver.find_element_by_xpath(xpath).click()
 

                   

返回亚马逊商品页面源码。


pageSource = driver.page_source


如果“Currently unavailable.”在页面源码中,即可确定是为僵尸链接。则在控制台打印该商品链接。


if 'Currently unavailable.' in pageSource:
   
print(driver.current_url)

                  

完成一次循环后,需要退回到Google搜索界面,下次一循环才能正确进行。


driver.back()


完成一页搜索结果筛选后,需要点击搜索结果页面的下一页继续筛选,直到无新的搜索结果为止。


# 定位下一页的按钮
next_button = driver.find_element_by_xpath('//*[@id="pnnext"]/span[2]')
# 如果下一页按钮存在
if next_button:
     # 这定位下一页按钮并点击
    driver.find_element_by_xpath(
'//*[@id="pnnext"]/span[2]').click()
# 否则退出循环、结束程序。
else:
   
break
 



以上便是使用「Selenium」+「Chromedriver」从环境搭建、查找链接原理到代码编写来实现爬取僵尸链接的全部过程。其完整代码为:


from selenium import webdriver

url =
'https://www.google.com/search?q=site%EF%BC%9Aamazon.com+Nike+Currently+unavailable.'
driver = webdriver.Chrome('C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe')
driver.maximize_window()
driver.get(url)
while True:
    all_rc = driver.find_elements_by_xpath(
"//div[@class='rc']")
    len_all_rc =
len(all_rc)
   
for i in range(1, len_all_rc + 1):
        xpath =
"//*[@id='rso']/div/div/div["+str(i)+"]/div/div/h3/a"
       
driver.find_element_by_xpath(xpath).click()
        pageSource = driver.page_source
       
if 'Currently unavailable.' in pageSource:
           
print(driver.current_url)
        driver.back()
    next_button = driver.find_element_by_xpath(
'//*[@id="pnnext"]/span[2]')
   
if next_button:
        driver.find_element_by_xpath(
'//*[@id="pnnext"]/span[2]').click()
   
else:
       
break


我的这篇文章只是简单的介绍了selenium + webdriver的使用,当然你也可以结合「Requests」+「bs4」爬取每个僵尸链接对应商品的Asin、标题、品牌、star、review等,并保存到文件中方便筛选你中意的僵尸。


 如图:


卖家之家倡导尊重保护知识产权。未经本站授权,任何人不得复制、转载、或以其他方式使用本网站的内容。鉴于第三方在平台发布信息数量庞大,如发现本站文章或其它信息可能存在侵权行为,请将身份、版权等证明文件以及相关质询发送邮件至complain#mjzj.com(#换为@),我们将及时沟通与处理

发表评论 未登录

说点什么...

最新评论

  • 目前暂无评论,快来抢沙发吧~

热门文章

新规!不符合这些要求的第三方卖家将被亚马逊罚款
新规!不符合这些要求的第三方卖家将被亚马逊罚款
Best Seller与Amazon's Choice哪个转化率高
Best Seller与Amazon's Choice哪个转化率高
什么驱使买家在黑五、网一购物?这些数据你一定要知道
骚操作!6人团伙变“间谍”潜入对手公司,就为抄袭产品信息?
亚马逊震怒裁员,VC巨蟒时代即将终结!
这个产品严查侵权,一天卖4000美金的卖家闻风下架
印度亚马逊仿牌和义乌货的天堂!注册;选品和交流
你家公司有在做烂营销吗?
亚马逊帐号关联因素有哪些?
Sunny随手记:近期关于亚马逊运营状态的一些思考

家友评论

说了一大推,广告?
大量FB评测大群被封!亚马逊卖家流量出路何在? - 文章
回复 Kyle:FBA 库存也可以转回来吗
员工离职扬言删掉所有铺货Listing?亚马逊电商企业是时候反思内部管理了 - 文章
回复 Kyle:那就跟卖自己。别跟卖别人,我又没说文章这个破事了~     别挑字眼,并没有什么意思
员工离职扬言删掉所有铺货Listing?亚马逊电商企业是时候反思内部管理了 - 文章
回复 mo-mo:不知道你为什么要用捅这个字?离职员工删掉listing,其他人还是可以跟卖回来的。
员工离职扬言删掉所有铺货Listing?亚马逊电商企业是时候反思内部管理了 - 文章
回复 Kyle:捅自己没事, 别祸害别人就好
员工离职扬言删掉所有铺货Listing?亚马逊电商企业是时候反思内部管理了 - 文章
这广告打的。。。 可惜没有踩帖子的功能
宝妈说:你放弃做亚马逊吧。 - 文章
回复 不愿冒泡的鱼:这人是自己悟出来的操作吧 ?!!
Best Seller与Amazon's Choice哪个转化率高 - 文章
广告打到这里来了
宝妈说:你放弃做亚马逊吧。 - 文章
这种破坏市场的公司亚马逊为什么不封他店铺!!
foerteng trading - 恶意跟卖曝光台
无赖辣鸡货代!被海关拉黑!无法清关!扣货不做赔偿玩失踪!
深圳市极速安达代理有限公司- 服务商曝光台
我们这边一样的情况,这个骗子在我们店铺买了一个产品,开始说好了返款留FB, 然后一直不给我贝宝号,后期我一直联系她,她就说她没有贝宝,要我返款支*付*宝,关键是!!!她还有同伙,另一个人的FB账号已经挂了,要我一起返款,这就算了,结果还给我一个单号,说另一个朋友也下单了,也要我返款。都要支*付*宝,支*付*宝不安全,后续不能撤,我只能t要她退货,但她不退,我怕她给差评,结果她真给我一个贝宝号,但是是国内的贝宝号,我这才知道有一个漏洞,国内的贝宝号不能给国内的转-账,所以我不能给她转账,她又抓着这个事情说只能返支付*宝。此时,我觉得应该是骗子了。我只能心痛要她退货,结果她就给我一个美国的贝宝号,说可以返款了。 我现在很头疼,遇到那种不打招呼叫朋友下单,然后给你单号的人怎么办。
shenghao888888@yahoo.com - 美国 - 测评黑名单
一模一样的情况,知道那个中国贝*宝账号不能返,就一直要求返到她朋友的支*付*宝,说自己的贝*宝账号不能用。后来告诉我另一款产品的测评人是她朋友,要求一起返给她,然后发现她所谓的那个朋友在FB上已经把我拉黑了
shenghao888888@yahoo.com - 美国 - 测评黑名单
顶一个,我也刚遇到这个骗子,昨天还在卖家之家搜过,没发现这个骗子,今天特么来搜,居然大家都遇到了。我也是这个情况,这个人好几个人一起,团伙骗子啊。希望大家把她团伙其他人的FB号爆出来。
shenghao888888@yahoo.com - 美国 - 测评黑名单
回复 JhinJhinChiong:你看不明白别人说的吗?看了聊天记录然后你就去告诉这个人,然后这个人就给卖家一个差评?你都合作了,还要求什么呢,你相信就好了,多管闲事
331836851@qq.com - 美国 - 测评黑名单
我来说下这个人的历史,开始不叫这个名字,关注很久了,不是一般的挑剔,说自己是俄罗斯人,九几年在中国待过,知道中国工厂套路,各种XX,还自带优越感,还说太便宜的产品不要找她,那个账号应该只是她用来测评的,并不是真正的账号,说不定是谁在背后操控这个账号呢,大家小心为妙 https://mjzj.com/ce-ping-bao-guang-tai/a60e8c8011cc.html 之前被人曝光过,所以改名字了,估计
Guo Mei Mei - 美国 - 测评黑名单
碰到一模一样的情况,可以肯定是中国人,贝宝账号都是中国名字,有组织有预谋的。请大家警惕,
shenghao888888@yahoo.com - 美国 - 测评黑名单
我这边情况也是一样的,遇到这种真是没办法,提前不和你说,直接叫朋友下单然后联系你,要去返款到支-付宝。
shenghao888888@yahoo.com - 美国 - 测评黑名单
只有我守着安静的沙漠
fuchkagi@gmail.com - 美国 - 测评黑名单
回复 Supercaca:这个人的profile估计是发别人的,每次都不一样,今天差点被骗
Vince Heimsness - 美国 - 测评黑名单
回复 Amanda:这种人动不动就威胁别人,无语,还骂人,好像谁欠他的一样。
Gena Savage - 美国 - 测评黑名单

跨境活动会议

破局--亚马逊选品运营纯干货大会
2018年福建亚马逊卖家年终盛典
福州仓山 01-12 参加活动