Webscraping Selenium 和 PhantomJS 返回产品详细信息的文本

Webscraping Selenium and PhantomJS Returning text for product details

我是网络抓取的新手 python,我正在尝试使用 Selenium 和 phantomJS 检索网页的产品详细信息文本,因为此页面不显示呈现的 html当我使用 "driver.page_source" 时,我的代码是这样的:

url = 'https://www.jumbo.cl/frutas-y-verduras?page=1'
driver = webdriver.PhantomJS()
driver.get(url)
html = driver.page_source

不幸的是,这样做我检索了相同的源代码,但没有可视化呈现的格式

我的代码摘录return:

categoryId\":\"21\",\"productTitle\":\"Champiñón 200 g | Jumbo.cl\",\"metaTagDescription\":\"Encuentra Champiñón 200 g y la mejor variedad de Verduras en Jumbo.cl\",\"releaseDate\":\"2017-08-24T00:00:00\",\"clusterHighlights\":{\"325\":\"Dia de la fruta y verdura\",\"3554\":\"Vitrina 3554 limpia\",\"3862\":\"EXCLUSIVO 31082019\",\"3864\":\"DESPACHO 310819\"

目标代码的摘录(我可以将此代码可视化到 chrome 控制台,但是当我访问源代码时,页面 return 显示了上面的代码)。

<li class="shelf-item">
  <div class="shelf-product-island">

包含每个产品详细信息值的容器在 class "shelf-item"

的列表中

您可以使用 chromedriver 代替 PhantomJS() 和以下代码:

from selenium import webdriver

driver = webdriver.Chrome('./chromedriver')

def parse(url):
    driver.get(url)

    driver.implicitly_wait(10)
    title_list = driver.find_elements_by_xpath('//a[@class="shelf-product-title"]/h2')

    title_list_text = [t.get_attribute('textContent') for t in title_list]

    return title_list_text

titles_list = parse("https://www.jumbo.cl/frutas-y-verduras?page=1")

print(titles_list)

但请注意,如果您想解析第二页和其他页面,则必须将第二页 url 传递给函数,例如:

titles_list = parse("https://www.jumbo.cl/frutas-y-verduras?page=2")

等等。或者在页面底部找到一个寻呼机按钮,点击它并重新解析另一个页面