在Scrapy中无法使用css或xpath选择器找到html元素

3b6akqbq  于 2023-05-17  发布在  其他
关注(0)|答案(1)|浏览(226)

我正在使用Scrapy来抓取这个网站。我想抓取所有class=“data1”的div元素。我使用css和xpath选择器来实现。但是,我无法使用css和xpath选择器找到这些元素,即使我可以在浏览器的html代码中看到它们。
在scrapy shell中获取url后:

In [6]: response.css('div#my_div')
Out[6]: [<Selector query="descendant-or-self::div[@id = 'my_div']" data='<div id="my_div">Results will be show...'>]

In [7]: response.css('div#my_div div')
Out[7]: []

In [8]: response.xpath('//div[@class="data1"]')
Out[8]: []

HTML看起来像这样:

<div id="my_div" style>
 <div class="data1">...</div>
 <div class="data1">...</div>
 <div class="data1">...</div>
 ...
</div>
ar7v8xwq

ar7v8xwq1#

这是因为网站的这一部分是用javascript呈现的。如果在示例中的第一个查询中调用.get(),您可以看到这一点:

In [1]: response.css('div#my_div').get()

Out[1]: '<div id="my_div">Results will be shown here.</div>'

如果你通过浏览器开发工具的网络标签进行调查,你会发现所有的信息都来自对'https://data.crn.com/2023/wotc2023.php?st1=1&st2=a'的API调用,当通过scrapy shell获取时,它会返回一个json对象,其中包含该部分的所有信息。

In [3]: fetch('https://data.crn.com/2023/wotc2023.php?st1=1&st2=a')
2023-05-08 20:57:48 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://data.crn.com/2023/wotc2023.php?st1=1&st2=a> (referer: None)

In [4]: response.json()
Out[4]: 
[{'Pkey': '617',
  'Company': 'F5',
  'Name_First': 'Barbara',
  'Name_Last': 'Abboud',
  'Image': 'f5-abboud-barbara.jpg'},
 {'Pkey': '1208',
  'Company': 'Samsung Electronics America',
  'Name_First': 'Shpresa',
  'Name_Last': 'Abdullaj',
  'Image': 'samsung-electronics-america-abdullaj-shpresa.jpg'},
 {'Pkey': '499',
  'Company': 'Davenport Group',
  'Name_First': 'Kim',
  'Name_Last': 'Abrams',
  'Image': 'davenport-group-abrams-kim.jpg'},
 {'Pkey': '35',
  'Company': 'Alteryx',
  'Name_First': 'Daniella',
  'Name_Last': 'Aburto Valle',
  'Image': 'alteryx-aburto-valle-daniella.jpg'},
  .......]

相关问题