刮片:提取数据(CSS选择器)

2024-04-29 14:34:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图从这个page获取数据(标题)。我的代码不起作用。我做错了什么

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

Tags: run代码httpscom标题wwwpageshell
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={})

然后你就可以走了

我认为问题可能在于元素是通过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)

相关问题 更多 >