使用 css 选择器使用 scrapy 抓取 Reactjs 页面上的嵌套标签

Posted

技术标签:

【中文标题】使用 css 选择器使用 scrapy 抓取 Reactjs 页面上的嵌套标签【英文标题】:Using css selectors to grab nested tag on Reactjs page using scrapy 【发布时间】:2018-04-19 05:59:31 【问题描述】:

我正在尝试使用 CSS 选择器获取突出显示的 href 值,但目前没有成功。

我正在使用scrapy shell 并尝试了这个:

response.css('body > span > section') 但它返回[]

我还尝试response.css('div') 看看它是否可以抓取任何div 标签,但它仍然返回[]

使用chrome的devtool抓取返回的css选择器

#react-root > section > main > article > div > div._cmdpi > div:nth-child(1) > div:nth-child(2) > a

我对 chrome 提供的 css 使用了 response.css(),但它也返回了 []

但是,当我尝试时:

response.css('body, span, section, main, article, div, div, div')

我收到了这个:

[<Selector xpath='descendant-or-self::body | descendant-or-self::span | descendant-or-self::section | descendant-or-self::main | descendant-or-self::article | descendant-or-self::div | descendant-or-self::div | descendant-or-self::div' data='<body class="">\n        \n    <span id="r'>, <Selector xpath='descendant-or-self::body | descendant-or-self::span | descendant-or-self::section | descendant-or-self::main | descendant-or-self::article | descendant-or-self::div | descendant-or-self::div | descendant-or-self::div' data='<span id="react-root"></span>'>]

我很困惑为什么某些 css 选择器有效而其他选择器不有效。比如divbody, span, section, main, article, div, div, div

【问题讨论】:

可以用bs4吗? select_one('a[href*=taken-by]') 【参考方案1】:

我认为原因是因为您在浏览器中看到的 html 代码可能是在客户端使用 javascript 生成的。我建议您检查使用 scrapy 收到的 html(如果需要,您可以将 response.body 保存在文件中)或在 shell 中检查它。 css 选择器中的, 类似于or 语句。该 href 所需的数据可能在 html 代码中的 json 中。

【讨论】:

以上是关于使用 css 选择器使用 scrapy 抓取 Reactjs 页面上的嵌套标签的主要内容,如果未能解决你的问题,请参考以下文章

Python爬虫之Scrapy框架系列(10)——Scrapy选择器selector

Python爬虫之Scrapy框架系列(10)——Scrapy选择器selector

Python爬虫之Scrapy框架系列(10)——Scrapy选择器selector

如何利用Scrapy爬虫框架抓取网页全部文章信息(上篇)

Scrapy里Selectors 四种基础的方法

[转]scrapy 选择器官方文档