scrapy shell 与用户界面不同,部分网站不可抓取
scrapy shell appears different as user interface, portion of the website is not scrapeable
问题是我无法抓取部分网站。如果我使用 Chrome devmode,我无法在 xpath 或选择器中复制正确的位置。
我会得到其他选项卡或 div 的正确路径,例如 body header:body > div.header.home-header > div
而当我尝试获取包含我想要的信息的选项卡时,我只得到:#htmlContent
。如果我手动编写它应该是:body > div.main.main-top.seach-boxstyle > div > div > div.recommend-product-wrap.produc-text > div > div.recommend-product
,但返回一个空列表。
我在考虑是否有人将整个 session 引用,这样我就无法抓取,或者这是另一个问题。 URL 是中文的:http://www.usewealth.com/Product/More.aspx?productDisplay=isArticle
我正在尝试帮助一家公司抓取其推荐的掉期清单,但该清单并未以任何方式出现。
问题在于页面使用 JavaScript 动态呈现其内容。 Scrapy 本身没有 运行 JavaScript,它只下载页面的 HTML 源,因此没有动态内容。在这种情况下基本上有两种选择。使用一些无头浏览器(例如 Selenium 或 Splash)渲染页面并让 Scrapy 解析渲染结果。根据我的经验,我建议使用 Splash,因为它更可靠,并且使用 scrapy-splash 库可以与 Scrapy 无缝集成。
另一种选择是使用浏览器的开发人员工具来查看页面是否不使用 API 来获取数据(JavaScript 然后在页面上呈现)。您尝试抓取的网站似乎就是这种情况。查看 Chrome 开发人员工具(网络选项卡,然后是 XHR 请求),我看到 POST 对此 URL 的请求:
http://www.usewealth.com/Action/ProductAJAX.ashx
它 returns 一个 JSON 响应似乎包含所有需要的数据,您可以使用标准 json
库对其进行解析。
问题是我无法抓取部分网站。如果我使用 Chrome devmode,我无法在 xpath 或选择器中复制正确的位置。
我会得到其他选项卡或 div 的正确路径,例如 body header:body > div.header.home-header > div
而当我尝试获取包含我想要的信息的选项卡时,我只得到:#htmlContent
。如果我手动编写它应该是:body > div.main.main-top.seach-boxstyle > div > div > div.recommend-product-wrap.produc-text > div > div.recommend-product
,但返回一个空列表。
我在考虑是否有人将整个 session 引用,这样我就无法抓取,或者这是另一个问题。 URL 是中文的:http://www.usewealth.com/Product/More.aspx?productDisplay=isArticle
我正在尝试帮助一家公司抓取其推荐的掉期清单,但该清单并未以任何方式出现。
问题在于页面使用 JavaScript 动态呈现其内容。 Scrapy 本身没有 运行 JavaScript,它只下载页面的 HTML 源,因此没有动态内容。在这种情况下基本上有两种选择。使用一些无头浏览器(例如 Selenium 或 Splash)渲染页面并让 Scrapy 解析渲染结果。根据我的经验,我建议使用 Splash,因为它更可靠,并且使用 scrapy-splash 库可以与 Scrapy 无缝集成。
另一种选择是使用浏览器的开发人员工具来查看页面是否不使用 API 来获取数据(JavaScript 然后在页面上呈现)。您尝试抓取的网站似乎就是这种情况。查看 Chrome 开发人员工具(网络选项卡,然后是 XHR 请求),我看到 POST 对此 URL 的请求:
http://www.usewealth.com/Action/ProductAJAX.ashx
它 returns 一个 JSON 响应似乎包含所有需要的数据,您可以使用标准 json
库对其进行解析。