2016-08-18 37 views
0

我試圖從舊的html頁面中獲取數據。Scrapy1.1/Python3從字符串中刪除字符串

Python3 Debian的 Scrapy 1.1

我看到一對夫婦例如什麼,我想在這裏做的,但對於我不明白,我無法重現我的結果的原因:

我想要得到的信息是聯繫人姓名這裏(李四)

<p><strong>Contact: <a href="http://www.example.com/t/search-title-Proprietor.html" style="color:#259cd5">Proprietor</a> John Doe</strong></p> 

我能夠用Scrapy返回:

Contact: [u'Contact: ', u' John Doe'] 

唯一的問題是,「聯繫人:」部分是寫在我的CSV文件...

Contact: , John Doe 

我嘗試了一堆正則表達式,並與可變玩,但我總是得到另一個問題。

這是我使用來獲取數據的內容:

item['Contact'] = response.xpath('//*[@id="main-contain"]/div[2]/div/div[6]/p[10]/strong/text()').extract() 

我也試圖與.replace(),但我最終

[u'', u' John Doe'] 

回答

0

所以最後簡單,

我的變量包含一個列表。我需要在我的列表中的某個東西上.replace()。

接觸[1] .replace( 「聯繫人」, 「」)

固定一切

0

你必須根據該網站所使用的模式的幾個選項來表示聯繫人:

In [1]: import scrapy 

In [2]: selector = scrapy.Selector(text='<p><strong>Contact: <a href="http://www.example.com/t/search-title-Proprietor.html" style="color:#259cd5">Proprietor</a> John Doe</strong></p>') 
    ...:  

在您的例子中,strong元素有3個孩子:1個文本節點,鏈路和其他文本節點:

In [3]: selector.xpath('.//p/strong/node()').extract() 
Out[3]: 
['Contact: ', 
'<a href="http://www.example.com/t/search-title-Proprietor.html" style="color:#259cd5">Proprietor</a>', 
' John Doe'] 

中的XPath使用於眼前的孩子,是文本節點過濾器:

In [4]: selector.xpath('.//p/strong/text()').extract() 
Out[4]: ['Contact: ', ' John Doe'] 

您可以選擇使用[last()]謂詞的最後一個:

In [5]: selector.xpath('.//p/strong/text()[last()]').extract() 
Out[5]: [' John Doe'] 

Scrapy選擇有.extract_first()方法得到一個單一值(或無)而不是您使用的默認列表.extract()

In [6]: selector.xpath('.//p/strong/text()[last()]').extract_first() 
Out[6]: ' John Doe' 

此外,您可以使用XPath的normalize-space()來擺脫領先的空白:

In [7]: selector.xpath('normalize-space(.//p/strong/text()[last()])').extract_first() 
Out[7]: 'John Doe'