如何提取成对的 (href, alt) wih python scrapy
How to extract pairs of (href, alt) wih python scrapy
我有一个 html 页面 (seed)
的形式:
<div class="sth1">
<table cellspacing="6" width="600">
<tr>
<td>
<a href="link1"><img alt="alt1" border="0" height="22" src="img1" width="92"></a>
</td>
<td>
<a href="link1">name1</a>
</td>
<td>
<a href="link2"><img alt="alt2" border="0" height="22" src="img2" width="92"></a>
</td>
<td>
<a href="link2">name2</a>
</td>
</tr>
</table>
</div>
我想做的是循环进入所有 <tr>
并使用 python scrapy 提取所有 href, alt
对。在这个例子中,我应该得到:
link1, alt1
link2, alt2
这是来自 Scrapy Shell
的示例:
$ scrapy shell index.html
In [1]: for cell in response.xpath("//div[@class='sth1']/table/tr/td"):
...: href = cell.xpath("a/@href").extract()
...: alt = cell.xpath("a/img/@alt").extract()
...: print href, alt
[u'link1'] [u'alt1']
[u'link1'] []
[u'link2'] [u'alt2']
[u'link2'] []
其中 index.html
包含问题中提供的示例 HTML。
你可以试试 Scrapy 的内置 SelectorList 结合 Python 的 zip():
from scrapy.selector import SelectorList
xpq = '//div[@class="sth1"]/table/tr/td[./a/img]'
cells = SelectorList(response.xpath(xpq))
zip(cells.xpath('a/@href'), cells.xpath('a/img/@alt'))
=> [('link1', 'alt1'), ('link2', 'alt2')]
我有一个 html 页面 (seed)
的形式:
<div class="sth1">
<table cellspacing="6" width="600">
<tr>
<td>
<a href="link1"><img alt="alt1" border="0" height="22" src="img1" width="92"></a>
</td>
<td>
<a href="link1">name1</a>
</td>
<td>
<a href="link2"><img alt="alt2" border="0" height="22" src="img2" width="92"></a>
</td>
<td>
<a href="link2">name2</a>
</td>
</tr>
</table>
</div>
我想做的是循环进入所有 <tr>
并使用 python scrapy 提取所有 href, alt
对。在这个例子中,我应该得到:
link1, alt1
link2, alt2
这是来自 Scrapy Shell
的示例:
$ scrapy shell index.html
In [1]: for cell in response.xpath("//div[@class='sth1']/table/tr/td"):
...: href = cell.xpath("a/@href").extract()
...: alt = cell.xpath("a/img/@alt").extract()
...: print href, alt
[u'link1'] [u'alt1']
[u'link1'] []
[u'link2'] [u'alt2']
[u'link2'] []
其中 index.html
包含问题中提供的示例 HTML。
你可以试试 Scrapy 的内置 SelectorList 结合 Python 的 zip():
from scrapy.selector import SelectorList
xpq = '//div[@class="sth1"]/table/tr/td[./a/img]'
cells = SelectorList(response.xpath(xpq))
zip(cells.xpath('a/@href'), cells.xpath('a/img/@alt'))
=> [('link1', 'alt1'), ('link2', 'alt2')]