

現在、Pythonを学習しています。  
Google検索APIで「東京都 会社概要」と検索し、検索結果の各webページのURLを取得し、  
それらのURL先をスクレイピングして会社概要を取得しようと考えています。  
当たり前のことですが、各webページのhtmlの書き方が異なっていて、tableタグだったり、liタグだったりで上手く求めている情報を抽出できません。  
何かアイデアがあれば教えて頂きたいです。

[code]

    # コード1.googleAPI検索し、結果をjsonファイルに出力
    import json
    import urllib.request
    import urllib.parse
    from urllib.request import urlopen
    QUERY = u'会社概要+東京都'
    key = 'KEY'
    cx = 'CX'
    NUM = 3
    cseurl = 'https://www.googleapis.com/customsearch/v1?'
    params = {
      'key': key,
      'q': QUERY,
      'cx': cx,
      'alt': 'json',
      'lr': 'lang_ja',
    }
    start = 1
    f = open('result/GoogleResult.json', 'w')
    
    for i in range(0, NUM):
      params['start'] = start
      req_url = cseurl + urllib.parse.urlencode(params)
      search_response = urllib.request.urlopen(req_url)
      search_results = search_response.read().decode("utf8")
      dump = json.loads(search_results)
      f.write(json.dumps(dump) + "\n")
      start = int(dump['queries']['nextPage'][0]['startIndex'])
    f.close()
    
    
    # コード2.google検索結果のjsonファイルからURL抽出
    import re
    read_file = open('result/GoogleResult.json', 'r')
    resultFileData = read_file.read().replace(',', '\n')
    read_file.close()
    # URL抽出するための正規表現パターン
    pattern = re.compile(r'"link":\s"http.+"')
    link_urls = pattern.findall(resultFileData)
    write_file = open('result/UrlList.txt', 'w')
    for link_url in link_urls:
      geturl = link_url.replace("\"link\": \"", "").replace("\"", "")
      write_file.write(geturl + '\n')
    write_file.close()
    
    # コード3.取得したURL先のtableタグを情報を取得
    import csv
    from bs4 import BeautifulSoup
    urlfile = open('result/UrlList.txt', 'r')
    urlrows = urlfile.readlines()
    urlfile.close()
    
    csvFile = open("result/url_file.csv", 'wt', newline='', encoding='utf-8')
    for urlrow in urlrows:
      html = urlopen(urlrow)
      bsObj = BeautifulSoup(html)
      tables = bsObj.findAll("table")
      writer = csv.writer(csvFile)
      for table in tables:
        rows = table.findAll("tr")
        for row in rows:
          csvRow = []
          for cell in row.findAll(['td', 'th']):
            csvRow.append(cell.get_text())
            if len(csvRow) == 2:
              writer.writerow(csvRow)
      writer.writerow("--------")
    csvFile.close()
    
[/code]

現在は、上記の3つのコードを順に実行していて、2つ目のURLを取得するところまでは何とかなりました。  
3つ目のコードはとりあえずtableタグの情報を持ってきている状態です。  
以上、よろしくお願いします。


CC BY-SA 3.0
2016-06-15T02:01:13.210
26755
2016-06-16T19:32:38.617
2016-06-15T07:55:35.417
76
16857
question
python
異なるwebページからの情報取得を一本化したい


Wikipediaの情報がxml形式でダウンロード出来るので、それをパースして会社概要を取得したことがあります。企業ホームページよりは構造化されていてやりやすいと思います。スクレイピングとは違いますが参考まで。


CC BY-SA 3.0
2016-06-16T19:32:38.617
26801
2016-06-16T19:32:38.617
16868
26755
answer