Python Scrapy:提取数据(css选择器)
我正试图从中获取数据(标题)。我的代码不起作用。我做错了什么Python Scrapy:提取数据(css选择器),python,scrapy,css-selectors,Python,Scrapy,Css Selectors,我正试图从中获取数据(标题)。我的代码不起作用。我做错了什么 scrapy shell https://www.indiegogo.com/projects/functional-footwear-run-pain-free#/ 我认为问题可能在于元素是通过Js动态添加的,这可能是scrapy无法提取它的原因,可能是您应该尝试使用selenium 下面是获取元素的selnium代码: titles = WebDriverWait(driver, 10).until( EC.presen
scrapy shell https://www.indiegogo.com/projects/functional-footwear-run-pain-free#/
我认为问题可能在于元素是通过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)
我认为问题可能在于元素是通过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动态创建的
docker pull scrapinghub/splash
docker run -d -p 8050:8050 --memory=1.5G --restart=always scrapinghub/splash --maxrss 1500 --max-timeout 3600 --slots 10
您可以使用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
这里是文档的链接
你的脚本看起来像这样。您可以发出如下请求,而不是scrapy.Request
来自scrapy_splash导入请求的
生成请求(url=url,callback=self.parse,meta={})
然后你就可以开始了。始终从查看源代码检查页面的源代码。从源代码看,它似乎不包含您要查找的元素。相反,它是用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
您可以使用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
这里是文档的链接
你的脚本看起来像这样。您可以发出如下请求,而不是scrapy.Request
来自scrapy_splash导入请求的
生成请求(url=url,callback=self.parse,meta={})
然后你就可以走了。我得到了答案:
t=
哦,对不起,这是我的错,是print(“t=,t)欢迎你!”!。如果您得到答案,您可以将此答案标记为有用。我得到的答案是:t=
哦,对不起,这是我的错误,是print(“t=”,t)欢迎您!。如果你得到了答案,你可以把这个答案标记为有用。