Scrapy1.1 / Python3从字符串中删除字符串

时间:2016-08-18 17:06:42

标签: python-3.x web-scraping scrapy

我正在尝试从旧的html页面获取数据。

Python3 Debian的 Scrapy 1.1

我已经看到了几个我想在这里做的例子,但由于某种原因,我不明白我无法用我的结果重现:

我想要的信息是这里的联系人姓名(John Doe)

<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']

2 个答案:

答案 0 :(得分:0)

最后这么简单,

我的变量包含一个列表。我需要.replace()在我的列表中的某些内容。

联系[1] .replace(“联系方式:”,“”)

修复了一切

答案 1 :(得分: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'