我正在使用Scrapy刮取视频网站。我有点难以刮掉一些东西。
实施例
<embed width="588" height="476" flashvars="id_video=7845976&theskin=default&url_bigthumb=http://sample.com/image.jpg&key=4219e347d8fdc0be3103eb3cbb458258-1416371743&categories=cat1" allowscriptaccess="always" allowfullscreen="true" quality="high" src="http://static.sample.com/swf/xv-player.swf" wmode="transparent" id="flash-player-embed" type="application/x-shockwave-flash">
我目前能够使用以下语句刮取html标签的属性: -
item['thumb'] = hxs.select("//embed[@id='flash-player-embed']/@flashvars").extract()[0]
以上陈述给出了以下结果: -
id_video = 7845976&安培; theskin =默认&安培; url_bigthumb = http://sample.com/image.jpg&key=4219e347d8fdc0be3103eb3cbb458258-1416371743&categories=cat1&#34; 设置allowscriptaccess =&#34;总是&#34;的allowFullScreen =&#34;真&#34;质量=&#34;高&#34; SRC =&#34; HTTP://static.sample.com/swf/xv-player.swf
我想要一个hxs.select语句,以便它只能从上面嵌入的代码中提取图像网址: -
我试过了: -
item['thumb'] = hxs.select("//embed[@id='flash-player-embed']/@flashvars/@url_bigthumb").extract()[0]
但没有用,因为它不起作用。
Scrapy或Python委员会的任何帮助都非常受欢迎,因为它可以节省我宝贵的Megabits。
提前致谢。
答案 0 :(得分:2)
urlparse也为获取元素提供了一个很好的解决方案:
>>from urlparse import parse_qs, urlparse
>>url = '?' + 'id_video=7845976&theskin=default&url_bigthumb=http://sample.com/image.jpg&key=4219e347d8fdc0be3103eb3cbb458258-1416371743&categories=cat1" allowscriptaccess="always" allowfullscreen="true" quality="high" src="http://static.sample.com/swf/xv-player.swf'
>>print parse_qs(urlparse(url).query)['url_bigthumb']
['http://sample.com/image.jpg']
答案 1 :(得分:1)
我的建议是你可以使用分割功能来获得确切的结果。
例如,
hxs.select('//embed[@id='flash-player-embed']/@flashvars').extract()[0].split('url_bigthumb=')[1].split('key')[0].replace('&','').strip().replace('&','').strip()
这是你现在可以使用的最简单的方法,但是你可以等待好的答案。
由于
答案 2 :(得分:0)
使用正则表达式的快速解决方案是:
re.findall(r'http?://[^\s<>&"]+|www\.[^\s<>&"]+', item['thumb'])[0]
答案 3 :(得分:0)
使用.re()方法选择XPath后使用正则表达式:
>>> sel = Selector(text="""<embed width="588" height="476" flashvars="id_video=7845976&theskin=default&url_bigthumb=http://sample.com/image.jpg&key=4219e347d8fdc0be3103eb3cbb458258-1416371743&categories=cat1" allowscriptaccess="always" allowfullscreen="true" quality="high" src="http://static.sample.com/swf/xv-player.swf" wmode="transparent" id="flash-player-embed" type="application/x-shockwave-flash">""")
>>> sel.xpath("//embed/@flashvars").re('url_bigthumb=([^&]+)')
[u'http://sample.com/image.jpg']