ここには、Google で自動検索を行う方法について尋ねる多くの投稿があります。私は BeautifulSoup を使用することを選択し、それについて寄せられた多くの質問をここで読みました。特定のタスクはかなりありふれたものに思えますが、私の質問に対する直接的な答えは見つかりませんでした。以下の私のコードはかなり自明であり、角括弧で囲まれたセクションは私が問題に遭遇した場所です(編集「問題に遭遇した」とは、この部分の疑似コードを実装する方法を理解できなかったことを意味し、ドキュメントを読んだ後、同様の質問をコードでオンラインで検索しても、その方法はまだわかりませんでした)。それが役に立てば、私の問題はおそらく、関心のある特定の記事を見つけるために PubMed で自動検索を行っている人にかなり似ていると思います。どうもありがとう。
#Find Description
import BeautifulSoup
import csv
import urllib
import urllib2
input_csv = "Company.csv"
output_csv = "output.csv"
def main():
with open(input_csv, "rb") as infile:
input_fields = ("Name")
reader = csv.DictReader(infile, fieldnames = input_fields)
with open(output_csv, "wb") as outfile:
output_fields = ("Name", "Description")
writer = csv.DictWriter(outfile, fieldnames = output_fields)
writer.writerow(dict((h,h) for h in output_fields))
next(reader)
first_row = next(reader)
for next_row in reader:
search_term = first_row["Name"]
url = "http://google.com/search?q=%s" % urllib.quote_plus(search_term)
#STEP ONE: Enter "search term" into Google Search
#req = urllib2.Request(url, None, {'User-Agent':'Google Chrome'} )
#res = urllib2.urlopen(req)
#dat = res.read()
#res.close()
#BeautifulSoup(dat)
#STEP TWO: Find Description
#if there is a wikipedia page for the entity:
#return first sentence of wikipedia page
#if other site:
#return all sentences that have the keyword "keyword" in them
#STEP THREE: Return Description as "google_search" variable
first_row["Company_Description"] = google_search
writer.writerow(first_row)
first_row = next_row
if __name__ == "__main__":
main()
補遺
これに取り組んでいる、または見ている人のために、私はまだ完成している次善の解決策を思いつきました。しかし、このページに来る他の人の助けになる場合に備えて、投稿すると思いました。基本的に、選択する Web ページを見つけるという問題に対処するのではなく、Wikipedia ですべての検索を行う最初のステップを行っただけです。これは私が望んでいるものではありませんが、少なくともエンティティのサブセットを簡単に取得できるようになります。コードは 2 つのファイル (Wikipedia.py と wiki_test.py) にあります。
#Wikipedia.py
from BeautifulSoup import BeautifulSoup
import csv
import urllib
import urllib2
import wiki_test
input_csv = "Name.csv"
output_csv = "WIKIPEDIA.csv"
def main():
with open(input_csv, "rb") as infile:
input_fields = ("A", "C", "E", "M", "O", "N", "P", "Y")
reader = csv.DictReader(infile, fieldnames = input_fields)
with open(output_csv, "wb") as outfile:
output_fields = ("A", "C", "E", "M", "O", "N", "P", "Y", "Description")
writer = csv.DictWriter(outfile, fieldnames = output_fields)
writer.writerow(dict((h,h) for h in output_fields))
next(reader)
first_row = next(reader)
for next_row in reader:
print(next_row)
print(first_row["A"])
search_term = first_row["A"]
#print(search_term)
result = wiki_test.wiki(search_term)
first_row["Description"] = result
writer.writerow(first_row)
first_row = next_row
if __name__ == "__main__":
main()
そして、この投稿に基づくヘルパー モジュールExtract the first paragraph from a Wikipedia article (Python) :
import urllib
import urllib2
from BeautifulSoup import BeautifulSoup
def wiki(article):
article = urllib.quote(article)
opener = urllib2.build_opener()
opener.addheaders = [('User-agent', 'Google Chrome')] #wikipedia needs this
resource = opener.open("http://en.wikipedia.org/wiki/" + article)
#try:
# urllib2.urlopen(resource)
#except urllib2.HTTPError, e:
# print(e)
data = resource.read()
resource.close()
soup = BeautifulSoup(data)
print soup.find('div',id="bodyContent").p
HTTP 404 エラー (つまり、ページが見つからない) を処理するように修正する必要があるだけです。このコードは、ウィキペディアで入手できる基本的な会社情報を見つけたい人なら誰でも機能します。繰り返しますが、Google 検索で動作し、関連するサイトと「キーワード」に言及しているサイトの関連セクションを見つけるものが欲しいのですが、少なくともこの現在のプログラムで何かが得られます。