【发布时间】:2016-08-08 02:13:06
【问题描述】:
我正在尝试在 scrapy 中使用正则表达式来查找页面上的所有电子邮件地址。
我正在使用此代码:
item["email"] = re.findall('[\w\.-]+@[\w\.-]+', response.body)
这几乎是完美的:它会抓取所有电子邮件并将它们提供给我。但是我想要的是:它在实际解析之前不会给我重复,即使有多个相同的电子邮件地址。
我收到这样的回复(这是正确的):
{'email': ['billy666@stanford.edu',
'cantorfamilies@stanford.edu',
'cantorfamilies@stanford.edu',
'cantorfamilies@stanford.edu',
'footer-stanford-logo@2x.png']}
但是我只想显示唯一的地址
{'email': ['billy666@stanford.edu',
'cantorfamilies@stanford.edu',
'footer-stanford-logo@2x.png']}
如果你想介绍如何只收集电子邮件而不是那个
'footer-stanford-logo@2x.png'
这也很有帮助。
谢谢大家!
【问题讨论】:
-
为什么要使用正则表达式来解析响应?似乎它可能更适合 xpath 或 css 选择器。使用正则表达式解析 HTML 通常是个坏主意
-
因为这是在一个广泛的爬虫中使用的,其中数据将存储在不同的地方。所以没有一个 xpath 不起作用
标签: python regex email web-scraping scrapy