在*标签内提取文本/参数*

时间:2014-08-04 23:27:49

标签: xml select xpath web-scraping scrapy

我有以下源代码,我试图从中提取所需的信息:

<div id="PaginationBottom" class="pagination">
    <a href="#" data-page="2" title="page 2 of 31" >2</a>
    <a href="#" data-page="3" title="page 3 of 31" >3</a>
    <a href="#" data-page="4" title="page 4 of 31" >4</a>
    <a href="#" data-page="10" title="page 10 of 31" >10</a>
    <a href="#" data-page="2" title="page 2 of 31" class="next" >next &raquo;</a>
</div>

我想要提取的是最终标记本身的 中的title="page 2 of 31"信息 。我可以使用以下代码获取标记:

response.xpath('//div[@id="PaginationBottom"]//a[@class="next"]').extract()

因此,我想知道的是,是否可以从标签本身中提取参数的文本。是吗?我无法在任何地方找到相关信息,但我是xpath的新手,并不知道最好的搜索字词。谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

/@title添加到xpath表达式的末尾:

//div[@id="PaginationBottom"]//a[@class="next"]/@title

来自scrapy shell

的演示
>>> response.xpath('//div[@id="PaginationBottom"]//a[@class="next"]/@title').extract()
[u'page 2 of 31']

只是跟进。您可能希望从title中获取31属性值page 2 of 31中的最大页数。 Scrapy Selector的内置re()方法在这里会有所帮助:

>>> response.xpath('//div[@id="PaginationBottom"]/a[@class="next"]/@title').re('page \d+ of (\d+)')
[u'31']

答案 1 :(得分:0)

尝试这样一个简单的:( htmltext是你要解析的文本)

regex1 =  '<a href="#" data-page="2"(.+?)>2</a>'
pattern1 = re.compile(regex1)
Extracted_Text = re.findall(pattern1,htmltext)
print Extracted_Text

此代码提取<a href="#" data-page="2">2</a>之间的所有内容 输出如下: title =&#34;第2页,共31页&#34;所以...