天天看点

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

    今天在抓取淘宝网网页的时候,使用了:

#店名

shopname = driver.find_element_by_xpath(".//*[@id='page']/div[2]/div/div[2]/ul/li[1]/a/span").text.strip()

#掌柜名

dealername = driver.find_element_by_xpath("./html/head/title").text.strip()

dealername = dealername[dealername.find('-')+1:dealername.rfind('-')]

    对于xpath,当然好用,毕竟Firefox和Chrome可以自动生成,所以爬虫开发的速度会更快。然而,得到的结果很惊讶,全部为空。我突然之间陷入了迷惑,不可能是因为版本的问题吧,毕竟selenium已经这么成熟了。下午试了很多次,都是无功而返,我非常沮丧。

    晚上继续,首先要找到问题出在什么地方。使用page_source查看,发现网页代码一应俱全。难道是非得把鼠标移动到特定位置,弹出菜单激活Js?于是使用:

driver.get('https://shop594784981.taobao.com')

time.sleep(3)

menu = driver.find_element_by_xpath("//*[@id='header-content']/div[2]/p/span[1]/span[1]/a")

ActionChains(driver).move_to_element(menu).perform()

time.sleep(2)

     弹出了隐含层,又如何呢,还是不行啊。~~~接着再尝试,试试其他

print(driver.find_element_by_id("J_TEnterShop").text)

     使用ID就可以了。然后,我就非常仔细地观察了ID这块的HTML结构特点,发现确实和之前要抓的结构不一样。接着我又试了一下这个Id的xpath,顺利提取。看来不是text方法的问题,也不是xpath的问题。而是结构的问题,对于xpath能提取什么样的结构我之前是没有弄清楚,现在举例说明一下:

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

span class="shop-name">

                  店铺:

                                        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>

                /span>

   那么问题来了,怎么提取“锦文图书批发”呢?

   有两种方法,一是换一个具有“锦文图书批发”的地方提取,二是使用XXYY - YY的方式。

继续阅读