2015-02-23 50 views
0

我是新来的正则表达式,并且正在编写Scrapy爬行程序来收集电子邮件地址。正则表达式在HTML中选择不同的电子邮件格式

我希望能够在抓取时选择不同格式的电子邮件。现在我只需找到任何带有@符号的东西 - 但想要变得更聪明一些。

如何选择使用以下格式的电子邮件?

  • [email protected]
  • 信息[在]例如[点] com
  • 在example.com info信息在例如
  • 信息科网

这里是我的目前有:

item['mail'] = hxs.select('//body//text()').re(r'[\w.-][email protected][\w.-]+') 
+0

很难为电子邮件地址编写正确的正则表达式。请参阅[使用正则表达式验证电子邮件地址](http://stackoverflow.com/q/201323/1281433)。获得更多格式,就像您要求的一样,会变得更加困难。由于人们通常会尝试像最近三次那样的格式来避免刮刀(尽管它不是特别有效),所以在这个问题上你可能遇到一些阻力。 – 2015-02-23 22:10:11

+0

我知道,这就是为什么我需要帮助 - 这个领域非常新颖,我的研究和尝试迄今为止都没有成功。这就是为什么我需要有经验的人。 – 2015-02-23 22:12:37

+0

关于上面的链接 - 我不是要验证电子邮件。我从来没有这样说过,我只是试图找到一个与页面上的内容匹配的模式并收集它们。 – 2015-02-23 22:14:01

回答

0

这是最好的我可以拿出来,但我真的除非你提供更多的例子,否则不知道它是否会为你工作。

用你的问题中的当前例子,它的工作原理。如果你不关心比这更复杂的电子邮件地址,那么这对你应该没问题。

[\w.-]+ ?(?:@|\[?at]?) ?[\w.-]+(?: ?\[?dot]? ?[\w.-]+)? 

那么我在这里做了什么?
我把一个交替的@符号,以便它可以通过使用可选的空间和支架与懒惰量词接受[at]at?

?(?:@|\[?at]?) ? 
^   ^
    lazy spaces 

我做对表达式的末尾相似,但我使整个非捕获组成为可选的,因为它会混淆示例电子邮件中的第一对夫妇行。

https://regex101.com/r/aC4kW3/1

+0

非常感谢!我很近,我没有使用?在你有他们的地方。学过的知识。 – 2015-02-24 00:50:35

+0

它似乎在您链接的程序中工作,但不是在实践中。它只是简单地选择带有或带有空格的单词。 – 2015-02-24 03:04:02

+0

这一切都取决于你的数据,你的选择,你正在使用什么语言,等等......我需要更多的细节 – 2015-02-24 05:26:29

相关问题