説明として、スクリプトが行っていることは、Google を使用して、LinkedIn のインデックス付きページを検索することです。具体的には、ユーザーの名前が表示されるページ (会社のプロフィール、仕事、ディスカッションなどではなく) を検索します。ターゲットの会社名と、おそらくその会社の標準的な電子メール形式がわかっているため (スクリプトの args で指定されているため)、検索は、会社に言及しているすべての LI プロファイル ページの結果を探し、名前を抽出し、e を生成するように見えます。・名前からメールアドレス。電子メール アドレスやドメインをスクレイピングするのではなく、名前をスクレイピングします。
実際には、LI がパブリック プロファイルを検索エンジンに表示する方法 (または多くのくだらない結果に対する許容度) の理解が不足していることを示しています。これは、結果がプロファイルではなく「ディレクトリ」ページでいっぱいになるためです。
しかし、その戦略的エラーは別として、あなたはスクリプトを間違って使用しています.Googleは文字ごとのワイルドカードをサポートしていません.ワイルドカードは主に、1つ以上の単語が間に入る可能性があることを示しています(または後/前-しかし、その間に最適に機能します)言い換えれば。ただし、ワイルドカードの動作は少しトリッキーで、すべてのケースについて完全に文書化されているわけではありません。したがって、これが後で失敗しなかったとしても、出力は、LinkedIn の非常に一般的な「サイト:」検索 (会社/ドメイン情報なし) に表示される最初の 100 名になります。これが誰にとってどのように役立つかわかりませんか?
その特定の行でスクリプトが失敗する理由については、検索結果項目の a-tags に対する BeautifulSoup.findAll 呼び出しの出力を反復処理しています。この場合、a.text の値と型は「None」であり、None には encode() メソッドがないため、エラーが発生します。BeautifulSoup には多くの優れたショートカットがありますが、エラーを追跡するのに混乱する可能性があります。findAll の結果は一連のタグであり、タグのデフォルトは findAll のように機能するため、a.text は、その反復サイクルの個々のタグで findAll('text') を呼び出すようなものだと思います。それがうまくいかない理由ははっきりとは言えません - 私はこのマシンに BeautifulSoup を持っていません.
関連部分:
user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'
headers={'User-Agent':user_agent,}
p = 10
def gatherEmails(l,domain,p):
print "Gathering emails from domain: "+domain
emails = []
for i in range(0,p):
url = "http://www.google.co.uk/search?hl=en&safe=off&q=site:linkedin.com/pub+"+re.sub('\..*','',domain)+"&start="+str(i)+"0"
request=urllib2.Request(url,None,headers)
response = urllib2.urlopen(request)
data = response.read()
html = BeautifulSoup(data)
for a in html.findAll('a',attrs={'class':'l'}):
namesurname = re.sub(' -.*','',a.text.encode('utf8'))
firstname = re.sub(' ([a-zA-Z])+','',namesurname).lower()
surname = re.sub('([a-zA-Z])+ ','',namesurname).lower()
sys.stdout.write("\r%d%%" %((100*(i+1))/p))
sys.stdout.flush()
if firstname != surname and not re.search('\W',firstname) and not re.search('\W',surname):
if l == '0' : # 1- firstname.surname@example.com
emails.append(firstname+" "+surname)