天天看點

關于資料抓取之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的方式。

繼續閱讀