我正在尝试获取像这样的html块中的几个href(抱歉格式化,但我想你需要一切):
<li class="evt-click" data-tab="yo" data-public="yoyo" data-tracking="1" data-tracking-tag="yo_name" data-tracking-params="{'type': 'yo'}" href="/the/url/i/want">
<a href="javascript:void(0)">Yo</a>
</li>
我的scrapy抓取能够将li
元素作为elmts
我想要的,但是当我尝试elmts.xpath('@href')
时,不会返回任何链接。
我不明白但是我已经2周了Scrapy!
答案 0 :(得分:3)
如果您希望 li&#39> / p>
xpath('//li[@class="evt-click"]/@href'))
在您自己的例子中,您需要:
xpath("./@href")
之所以不起作用的原因是因为您所寻找的链接中的html中不存在您所寻找的内容,有11个li class="evt-click"
且没有任何一个href条,其中包含一个标记内的js:
您可以使用scrapy-splash来完全呈现页面以获取动态生成的数据,您需要按照链接说明进行安装:
添加到setting.py:
DOWNLOADER_MIDDLEWARES = {
'scrapyjs.SplashMiddleware': 725,
}
启动泊坞窗实例:
docker run -p 8050:8050 scrapinghub/splash:
然后这足以获得您想要的数据:
import scrapy
class MySpider(scrapy.Spider):
name = "deez"
start_urls = ["http://www.deezer.com/profile/154723101"]
def start_requests(self):
for url in self.start_urls:
yield scrapy.Request(url, self.parse, meta={
'splash': {
'endpoint': 'render.html',
'args': {'wait': 1}
}
})
def parse(self, response):
print(response.xpath("//li[@class='evt-click']").extract())
输出:
$ scrapy crawl deez
.............................
2016-03-20 23:01:12 [scrapy] DEBUG: Crawled (200) <POST http://127.0.0.1:8050/render.html> (referer: None)
[u'/profile/154723101/loved', u'/profile/154723101/playlists', u'/profile/154723101/albums', u'/profile/154723101/artists', u'/profile/154723101/radios', u'/profile/154723101/following', u'/profile/154723101/followers']
selenium也是另一种选择。