首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scrapy:提取数据(css-selector)

Scrapy:提取数据(css-selector)
EN

Stack Overflow用户
提问于 2020-08-03 00:10:39
回答 2查看 57关注 0票数 0

我正在尝试从这个page获取数据(标题)。我的代码不能工作。我做错了什么?

代码语言:javascript
复制
scrapy shell https://www.indiegogo.com/projects/functional-footwear-run-pain-free#/
代码语言:javascript
复制
response.css('.t-h3--sansSerif::text').getall()
EN

回答 2

Stack Overflow用户

发布于 2020-08-03 00:49:21

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

以下是用于获取元素的selnium代码:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2020-08-03 01:19:38

总是从view-source检查页面的源代码。查看源代码,它看起来并不包含您正在寻找的元素。相反,它是用javascript动态创建的。

您可以使用selenium来抓取这些站点。但selenium也有它的警告。它是同步的。

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

代码语言: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,您还可以发出这样的请求

代码语言:javascript
复制
from scrapy_splash import SplashRequest
yield SplashRequest(url=url, callback=self.parse, meta={})

然后你就可以走了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63218249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档