Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy:提取数据(css选择器)_Python_Scrapy_Css Selectors - Fatal编程技术网

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)欢迎您!。如果你得到了答案,你可以把这个答案标记为有用。