異なるwebページからの情報取得を一本化したい
現在、Pythonを学習しています。
Google検索APIで「東京都 会社概要」と検索し、検索結果の各webページのURLを取得し、
それらのURL先をスクレイピングして会社概要を取得しようと考えています。
当たり前のことですが、各webページのhtmlの書き方が異なっていて、tableタグだったり、liタグだったりで上手く求めている情報を抽出できません。
何かアイデアがあれば教えて頂きたいです。
# コード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()
現在は、上記の3つのコードを順に実行していて、2つ目のURLを取得するところまでは何とかなりました。
3つ目のコードはとりあえずtableタグの情報を持ってきている状態です。
以上、よろしくお願いします。