开发者社区> 五岳之巅> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

关于数据抓取之xpath提取text为空问题的原因和解决方案

简介:     今天在抓取淘宝网网页的时候,使用了: #店名 shopname = driver.find_element_by_xpath(".//*[@id='page']/div[2]/div/div[2]/ul/li[1]/a/span").
+关注继续查看
    今天在抓取淘宝网网页的时候,使用了:
  1. #店名
  2. shopname = driver.find_element_by_xpath(".//*[@id='page']/div[2]/div/div[2]/ul/li[1]/a/span").text.strip()
  3. #掌柜名
  4. dealername = driver.find_element_by_xpath("./html/head/title").text.strip()
  5. dealername = dealername[dealername.find('-')+1:dealername.rfind('-')]
    对于xpath,当然好用,毕竟Firefox和Chrome可以自动生成,所以爬虫开发的速度会更快。然而,得到的结果很惊讶,全部为空。我突然之间陷入了迷惑,不可能是因为版本的问题吧,毕竟selenium已经这么成熟了。下午试了很多次,都是无功而返,我非常沮丧。
    晚上继续,首先要找到问题出在什么地方。使用page_source查看,发现网页代码一应俱全。难道是非得把鼠标移动到特定位置,弹出菜单激活Js?于是使用:
  1. driver.get('https://shop594784981.taobao.com')
  2. time.sleep(3)
  3. menu = driver.find_element_by_xpath("//*[@id='header-content']/div[2]/p/span[1]/span[1]/a")
  4. ActionChains(driver).move_to_element(menu).perform()
  5. time.sleep(2)
     弹出了隐含层,又如何呢,还是不行啊。~~~接着再尝试,试试其他
  1. print(driver.find_element_by_id("J_TEnterShop").text)
     使用ID就可以了。然后,我就非常仔细地观察了ID这块的HTML结构特点,发现确实和之前要抓的结构不一样。接着我又试了一下这个Id的xpath,顺利提取。看来不是text方法的问题,也不是xpath的问题。而是结构的问题,对于xpath能提取什么样的结构我之前是没有弄清楚,现在举例说明一下:
  1. span class="shop-name">
  2.                   店铺:
  3.                                         a href="//shop124836129.taobao.com?spm=a1z10.1-c.0.0.XEwkxh" target="_blank" class="J_TGoldlog" data-goldlog-id="/tbwmdd.1.044" data-spm-anchor-id="a1z10.1-c.0.0">锦文图书批发i id="J_TEnterShop">进入店铺/i>/a>
  4.                 /span>

   我只想提取店铺名称,但店铺名称在XXYY结构中,目标是XX,使用xpath提取的XX路径使用text提取的结果是空。但YY的xpath提取则是“进入店铺”,使用整个a链接的xpath是“锦文图书批发进入店铺”。所以xpath看来要使用标签封闭结构才行。
   那么问题来了,怎么提取“锦文图书批发”呢?
   有两种方法,一是换一个具有“锦文图书批发”的地方提取,二是使用XXYY - YY的方式。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DL之DCGAN(Keras框架):基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成(保存h5模型→加载模型)
DL之DCGAN(Keras框架):基于keras框架利用深度卷积对抗网络DCGAN算法对MNIST数据集实现图像生成(保存h5模型→加载模型)
25 0
卷起来了DeepMind发布媲美普通程序员的AlphaCode,同日OpenAI神经数学证明器拿下奥数题(一)
卷起来了DeepMind发布媲美普通程序员的AlphaCode,同日OpenAI神经数学证明器拿下奥数题(一)
50 0
DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)(一)
DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)
156 0
《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一2.6.2 缓冲区数据结构
本节书摘来华章计算机《Java核心技术 卷Ⅱ 高级特性(原书第10版)》一书中的第2章 ,第2.6.2节,[美] 凯S.霍斯特曼(Cay S. Horstmann) 著陈昊鹏 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
819 0
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】 说明如下,不懂的问题直接我【费元星Q9715234】 1.反射的意义在于不将xml tag写死在sax 的代码中,直接配置到一个bean就可以了。
1091 0
+关注
262
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载