我正在尝试从这个page获取数据(标题)。我的代码不能工作。我做错了什么?
scrapy shell https://www.indiegogo.com/projects/functional-footwear-run-pain-free#/response.css('.t-h3--sansSerif::text').getall()发布于 2020-08-03 00:49:21
我认为问题可能是元素是通过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)发布于 2020-08-03 01:19:38
总是从view-source检查页面的源代码。查看源代码,它看起来并不包含您正在寻找的元素。相反,它是用javascript动态创建的。
您可以使用selenium来抓取这些站点。但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={})然后你就可以走了。
https://stackoverflow.com/questions/63218249
复制相似问题