这是我在看了几部Tutroials后第一次使用Scrapy,我正在尝试抓取这个网址
https://www.hackster.io/arduino/members
我想获取每个用户配置文件的链接。我按如下方式运行了我的刮擦外壳
print(response.css("#main > div > div > div > div:nth-child(2) > div.hckui__layout__container > div.hckui__layout__wrapper1170 hckui__layout__fullScreenHeight > div > div.common-overlay__parent__1A_nT > div.grid__gridBasic__fjt5B grid__grid__1QeD6 grid__guttersH__2MYvz grid__guttersV__3M28R > div:nth-child(1) > div.undefined hckui__layout__flexCenterItems > div.user_card__content__1YVc5 > a.hckui__typography__bodyM hckui__typography__link hckui__typography__bold::attr(href)").extract())
但我只得到 [] 作为输出
我想获取所附照片中指定的链接,任何人都可以看看并告诉我我的命令是否有问题吗?
要抓取的网址
当我使用谷歌的 chorme 检查选项并立即复制选择器时,我得到了相同的输出
#main > div > div > div > div:nth-child(2) > div > div > div > div.common-overlay__parent__1A_nT > div > div:nth-child(1) > div > div > a
or even using
#main > div > div > div > div:nth-child(2) > div > div > div > div.common-overlay__parent__1A_nT > div
这是因为您在Chrome控制台中看到的html是在javascript中构建的客户端。默认情况下,Scrapy 不会解释 javascript 并读取服务器发送的页面源代码。在这里查看我的答案以找到您问题的解决方案。
要检查抓取器得到的响应:-
- 打开终端
- 运行命令scrapy shell https://www.hackster.io/arduino/members
- 运行命令视图(响应(
抓取工具看到的响应将显示在您的默认 Web 浏览器中。
从此响应中,您可以检查您的爬虫是否正在获取您想要抓取的内容!
正如我从响应中看到的那样,您在响应中没有得到Arduino_Genuino,这绝对是客户端 javascript 渲染的情况。
对抓取工具可见的网页的屏幕截图。
要从此类页面抓取数据,您需要使用在您的本地主机上运行的 JavaScript 渲染引擎,例如 scrapy-splash:8050
您必须将要抓取的 url 传递给启动渲染引擎,并且在 javascript 完全加载到 localhost:8050 的启动启动中一段时间后,您必须从那里抓取数据。
参考启动文档:https://splash.readthedocs.io/en/stable/api.html