刮标签属性内的元素 - Scrapy

时间:2014-11-19 05:00:05

标签: python tags web-scraping scrapy embed

我正在使用Scrapy刮取视频网站。我有点难以刮掉一些东西。

实施例

<embed width="588" height="476" flashvars="id_video=7845976&amp;theskin=default&amp;url_bigthumb=http://sample.com/image.jpg&amp;key=4219e347d8fdc0be3103eb3cbb458258-1416371743&amp;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语句,以便它只能从上面嵌入的代码中提取图像网址: -

  

http://sample.com/image.jpg

我试过了: -

item['thumb'] = hxs.select("//embed[@id='flash-player-embed']/@flashvars/@url_bigthumb").extract()[0]

但没有用,因为它不起作用。

Scrapy或Python委员会的任何帮助都非常受欢迎,因为它可以节省我宝贵的Megabits。

提前致谢。

4 个答案:

答案 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('&amp;','').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&amp;theskin=default&amp;url_bigthumb=http://sample.com/image.jpg&amp;key=4219e347d8fdc0be3103eb3cbb458258-1416371743&amp;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']

了解更多: