如何为没有电子邮件的人抓取空字符串

时间:2017-01-18 03:46:59

标签: python python-3.x scrapy scrapy-spider

我正在尝试抓一个有人和他们信息的网页(电话,姓名,职位,电子邮件等)。有些人错过了电话号码或电子邮件而且我遇到了麻烦,因为我组合了列表,如果它没有刮掉字符串,索引会有所不同。

这就是我抓电子邮件的方式:

response.xpath('//ul//div[@class="contact-text contact-email ctaType-email"]/a/@title').extract()

我正在收到来自此HTML代码的人的电子邮件:

<div class="contact-text contact-email ctaType-email">
    <a itemprop="email" href="mailto:test@gmail.com" alt=
  "test@gmail.com" title="test@gmail.com">test@gmail.com</a>                                            
</div>

然而,这完全是使用这个HTML代码跳过人并弄乱我的列表索引。

<div class="contact-text contact-email ctaType-email">

</div>

有没有让它刮掉空的电子邮件地址字段,以便我能够轻松地组合字段或在这些空字段中添加字符串?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以简单地将提取分为两部分:

  1. 提取所有人员节点
  2. 为每个人节点提取电子邮件或清空
  3. 例如:

    people = response.xpath('//ul//div[@class="contact-text contact-email ctaType-email"]')
    emails = [p.xpath('a/@title').extract() or '' for p in people]
    

    避免这类问题的常用方法是提取项目节点然后迭代它们:

    people = response.xpath('//ul//div[@class="contact-text contact-email ctaType-email"]')
    for person in people:
        item = dict()
        item['email'] = person.xpath('a/@title').extract()
        item['something_else'] = person.xpath('...')
        # ...
        yield item