【问题标题】:Python: Web scraping shopify sitePython:网页抓取 shopify 网站
【发布时间】:2020-07-28 00:01:45
【问题描述】:

我正在尝试抓取许多网站,但其中之一是 Shopify (AFAIK) 支持的“Lime Crime”。我正在使用 lxml 库,但是当我尝试使用 xpath 转到一个元素时,我得到了一个空数组,但它实际上存在于网页中。

import requests
from lxml import html
url = "https://limecrime.com/collections/unicorn-hair-full-coverage"
response = requests.get(url)
byte_data = response.content
source_code = html.fromstring(byte_data)

我试过source_code.cssselect("a.CF-Product__ImageWrapper")source_code.cssselect("CF-Product__ImageWrapper"),但没有成功。 谁能帮我获取产品的所有链接?

【问题讨论】:

    标签: python web-scraping lxml


    【解决方案1】:

    这可能只是因为您要查找的内容是在第二阶段使用一些 Javascript 加载的,但在您指定的 url 的 html 页面中存在。

    response 无法做到这一点:数据不存在。作为替代方案,您可以查看headless chrome automation。想到的库,puppeteer 和 Python 版本,pyppeteer

    无头浏览器库允许您从本质上运行完整浏览器的实例,它将解析和下载每个资源,就像您在屏幕上看到的一样,并最终为您提供完整的 DOM 以进行解析。

    【讨论】:

    • 谢谢,我会检查并考虑它的解决方案。我期待在没有另一个图书馆的情况下得到一些东西。但我明白原因。
    【解决方案2】:

    不,它没有。您可能正在尝试解析在 Javascript 中生成的元素,或者至少在 Javascript 中分配了它的类。

    lxml 不会运行 Javascript 代码,它只会解析您从该 URL 下载的原始 HTML。您可以通过终端查看 HTML:

    curl -s "https://limecrime.com/collections/unicorn-hair-full-coverage" | grep "CF-Product__ImageWrapper"
    

    你可以看到它返回零行。

    如果您想查看实际响应,您可以使用:

    curl -s "https://limecrime.com/collections/unicorn-hair-full-coverage"

    这将准确地显示您的代码正在解析什么。

    【讨论】:

      【解决方案3】:

      获取页面源代码 你可以使用 requests 和 BeautifulSoup

      import requests
      from lxml import html
      from bs4 import BeautifulSoup
      url = "https://limecrime.com/collections/unicorn-hair-full-coverage"
      headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) 
      Gecko/20100101 Firefox/78.0'}
      s = requests.session()
      s.headers.update(headers)
      response = requests.get(url)
      soup = BeautifulSoup(response.content, 'lxml')
      print (soup)
      

      【讨论】:

      • 嗨,是的,该代码有效。但我的问题与加载的 javascript 内容有关。谢谢。
      猜你喜欢
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多