selenium+xpath获取淘宝商品内容

以前写的第一份爬取淘宝信息,当时觉得还可以,完全就是一个面向流程的写法。。。现在看来,这是什么鬼。。。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from lxml import etree

driver = webdriver.Chrome()
driver.get('https://www.taobao.com')

driver.find_element_by_xpath('//input[@id="q"]').send_keys('Python', Keys.ENTER)
html = driver.page_source
html = etree.HTML(html)

images = html.xpath('//img[@class="J_ItemPic img"]/@data-src')
prices = html.xpath('//div[@class="items"]//strong/text()')
deals = html.xpath('//*[@class="deal-cnt"]/text()')
shops = html.xpath('//*[@class="shopname J_MouseEneterLeave J_ShopInfo"][1]/span[2]/text()')
locations = html.xpath('//div[@class="location"]/text()')


for i in range(len(images)):
    items = html.xpath('//*[@class="J_ClickStat"]')[i]
    temp = {
    'title': items.xpath('string(.)').strip(),
    'image': images[i],
    'price': prices[i],
    'deal': deals[i],
    'shop': shops[i],
    'location': locations[i],
    }
    print(temp)

对于标题title部分,使用 //*[@class="J_ClickStat"] 定位的是48个元素, 但是直接使用/text()获取其文本内容会得到200多个

在这里采用一种迂回的方法

items = html.xpath('//*[@class="J_ClickStat"]')[i]
items.xpath('string(.)').strip()

先获取当前节点,然后使用 string() 获取当前节点的所有文本信息,再使用 strip() 函数去掉所有的空格换行符等

你可能感兴趣的:(selenium+xpath获取淘宝商品内容)