解析时无法收到电子邮件

时间:2016-01-23 14:11:41

标签: python web-scraping beautifulsoup

我是抓取和解析的新手,我不知道如何解决下一个问题。我需要从许多页面中删除电子邮件。 For example

电子邮件所在的代码部分:

<tr><td>Email:</td><td width="10"></td><td><script>var ylhrfq = "&#121;&#112;&#114;";var bdnd = "&#97;&#105;&#108;";var byil = "&#115;&#116;&#46;&#99;";var bwdbdf = "&#97;&#103;&#101;&#64;";var dqiex = "&#46;&#99;";var pner = "&#111;&#109;";var qkfow = "&#103;&#109;";var azzl = "&#105;&#101;";var hgcr = "&#110;&#46;&#112;&#108;";var link = byil + ylhrfq + azzl + hgcr + bwdbdf + qkfow + bdnd + dqiex + pner;var text = link;document.write('<a href="mailto:'+link+'"  />'+text+'</a>');</script></td></tr>

是否可以使用BF获取此电子邮件?如果是,我该怎么做?

Win7,Python3,BeautifulSoup

2 个答案:

答案 0 :(得分:1)

似乎电子邮件地址隐藏在原始html中并由javascript代码生成。通过python2requestsjs2pyBeautifulSoup4,我终于获得了正确的电子邮件地址,希望这就是您想要的。

import bs4
import requests
import subprocess
import js2py
from HTMLParser import HTMLParser

html = requests.get('http://findyourvacationhome.com/find.php?property=5068927').content
soup = bs4.BeautifulSoup(html, 'html.parser')
raw_script = soup.find_all('table')[6].find_all('tr')[2].find_all('td')[2].script.contents[0]

script = raw_script.replace("""var text = link;document.write('<a href="mailto:'+link+'"  />'+text+'</a>');""", """""")
result = js2py.eval_js(script)
htmlparser = HTMLParser()
result = htmlparser.unescape(result)

print(result)

我分四步完成:

  1. 使用requests
  2. 获取网页的html
  3. 使用BeautifulSoup4解析HTML代码并获取用于生成电子邮件的JavaScript代码
  4. 使用js2py执行js代码并获得结果。
  5. 使用HTMLParser
  6. 转义字符串

答案 1 :(得分:0)

您需要获取已解析的HTML。源本身仅包含占位符和脚本。在PowerShell中,我会运行它来获取电子邮件:

$t = Invoke-WebRequest -Uri "http://findyourvacationhome.com/find.php?property=5068927"
$t.Links | Where-Object { $_.href -match 'mailto' } | Select-Object -ExpandProperty outertext