我正在研究scrapy,我正在抓一个网站并使用xpath
来抓取物品。
但是有些div
包含javascript
,所以当我使用xpath直到包含javascript代码的div id
返回一个空列表,并且不包含div元素(包含javascript)时能够获取HTML数据
HTML代码
<div class="subContent2">
<div id="contentDetails">
<div class="eventDetails">
<h2>
<a href="javascript:;" onclick="jdevents.getEvent(117032)">Some data</a>
</h2>
</div>
</div>
</div>
蜘蛛码
class ExampleSpider(BaseSpider):
name = "example"
domain_name = "www.example.com"
start_urls = ["http://www.example.com/jkl/index.php"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
required_data = hxs.select('//div[@class="subContent2"]/div[@id="contentDetails"]/div[@class="eventDetails"]')
那么如何从上面提到的text(Some data)
中的anchor tag
获取h2 element
,是否有任何替代方法从scrapy中包含javascript的元素中获取数据
答案 0 :(得分:2)
<div class="subContent2">
<div id="contentDetails">
<div class="eventDetails">
<h2>
<a href="javascript:;" onclick="jdevents.getEvent(117032)">Some data</a>
</h2>
</div>
</div>
</div>
在这种情况下,问题不是获取'某些数据'字符串的javascript代码。
您需要获得子节点:
required_data = hxs.select('//div[@class="subContent2"]/div[@id="contentDetails"]/div[@class="eventDetails"]/h2/a/text()')
或使用string
功能:
required_data = hxs.select('string(//div[@class="subContent2"]/div[@id="contentDetails"]/div[@class="eventDetails"])')