抓取网页并需要选择正确的选择器

时间:2018-10-17 16:16:05

标签: python css scrapy screen-scraping

这是我在看完两本教程之后第一次使用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())

但是我只有[]作为输出

我想获得附件中照片中指定的链接,任何人都可以看看并告诉我我的命令是否有问题吗?

url to be scraped

当我使用Google的chorme inspect选项并立即复制选择器时,我得到相同的输出

#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 

2 个答案:

答案 0 :(得分:1)

这是因为您在Chrome控制台中看到的html是用javascript客户端构建的。默认情况下,Scrapy不会解释javascript并读取服务器发送的页面源。请参阅我的答案here,找到解决您问题的方法。

答案 1 :(得分:0)

要检查抓取的抓取工具得到什么响应:-

  1. 打开终端
  2. 运行命令 scrapy shell https://www.hackster.io/arduino/members
  3. 运行命令查看(响应)

对爬虫的响应将显示在默认的Web浏览器中。

从此响应中,您可以检查抓取工具是否正在获取要抓取的内容!

正如我从响应中看到的那样,您没有在响应中得到Arduino_Genuino,这肯定是客户端javascript渲染的一种情况。

Screenshot of the webpage as visible to the crawler.

要从此类页面中抓取数据,您需要使用可在本地主机上运行的javascript渲染引擎,例如scrapy-splash:8050

您必须将URL传递到Splash呈现引擎,并且在将javascript完全加载到localhost:8050的Splash中一段时间​​后,必须从此处刮取数据。

引用初始文档:https://splash.readthedocs.io/en/stable/api.html