【问题标题】:Scrapy: extracting data(css-selector)Scrapy:提取数据(css-selector)
【发布时间】:2020-11-22 20:37:58
【问题描述】:

我正在尝试从此page 获取数据(标题)。我的代码不起作用。我做错了什么?

scrapy shell https://www.indiegogo.com/projects/functional-footwear-run-pain-free#/
response.css('.t-h3--sansSerif::text').getall()

【问题讨论】:

    标签: python scrapy css-selectors


    【解决方案1】:

    我认为问题可能是元素是通过 Js 动态添加的,这可能是 scrapy 无法提取它的原因可能是您应该尝试使用 selenium。

    这里是获取元素的 selnium 代码:​​

    titles = WebDriverWait(driver, 10).until(
        EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#main .is-12-touch+ .is-12-touch"))
    )
    
    for title in titles:    
        t = title.text
        print("t = ", title)
    

    【讨论】:

    • 我得到了答案:t = <selenium.webdriver.remote.webelement.WebElement (session="c7b4ab0c51e6ede67c1817d9a3564170", element="06562566-71e1-4d40-8df5-8bcd44878a7c")>
    • 哦,对不起,这是我的错误,它是 print("t = ", t)
    • 欢迎您!如果你得到你的答案,你可能会将此答案标记为有用。
    【解决方案2】:

    始终从查看源检查页面的来源。查看源代码,它看起来不包含您要查找的元素。相反,它是使用 javascript 动态创建的。

    您可以使用 selenium 来抓取此类网站。但是硒有它的警告。它是同步的。

    由于您使用的是scrapy,更好的选择是使用scrapy-splash 包。 Splash 呈现 javascript 并返回完全呈现的 html 页面,您可以使用 xpath 或 css 选择器轻松抓取该页面。请记住,您需要在 docker 容器 中运行 Splash 服务器。并像代理服务器一样使用它来渲染 javascript。

    docker pull scrapinghub/splash
    docker run -d -p 8050:8050 --memory=1.5G --restart=always scrapinghub/splash --maxrss 1500 --max-timeout 3600 --slots 10
    

    这是文档的链接。 https://splash.readthedocs.io/en/stable/

    您的脚本看起来像这样。代替scrapy.Request,你可以提出类似的请求

    from scrapy_splash import SplashRequest
    yield SplashRequest(url=url, callback=self.parse, meta={})
    

    然后你就可以走了。

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多