2024-04-29 14:34:57 发布
网友
我正试图从这个page获取数据(标题)。我的代码不起作用。我做错了什么
scrapy shell https://www.indiegogo.com/projects/functional-footwear-run-pain-free#/
response.css('.t-h3--sansSerif::text').getall()
始终从查看源检查页面的源。从源代码看,它似乎不包含您要查找的元素。相反,它是用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
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)
始终从查看源检查页面的源。从源代码看,它似乎不包含您要查找的元素。相反,它是用javascript动态创建的
您可以使用selenium来清除这些站点。但是硒也有它的警告。它是同步的
由于您使用的是scrapy,因此更好的选择是使用scrapy splash软件包Splash呈现javascript并返回完全呈现的html页面,您可以使用xpath或css选择器轻松抓取该页面。请记住,您需要在一个docker容器中运行Splash服务器。并像代理服务器一样使用它来呈现javascript
这里是文档的链接https://splash.readthedocs.io/en/stable/
你的脚本看起来像这样。您可以发出如下请求,而不是
scrapy.Request
然后你就可以走了
我认为问题可能在于元素是通过Js动态添加的,这可能是scrapy无法提取它的原因,可能是您应该尝试使用selenium
下面是获取元素的selnium代码:
相关问题 更多 >
编程相关推荐