0
Googleニュースのすべてのページからすべての結果を得るために、クローラを改良して、クエリに関するすべてのニュース結果をクロールしています。現在のコードは、最初のページのGoogelニュース検索結果のみを返すようです。すべてのページの結果を取得する方法を知っていただければ幸いです。どうもありがとう!以下Googleニュースクローラフリップページ
私のコード:
import requests
from bs4 import BeautifulSoup
import time
import datetime
from random import randint
import numpy as np
import pandas as pd
query2Google = input("What do you want from Google News?\n")
def QGN(query2Google):
s = '"'+query2Google+'"' #Keywords for query
s = s.replace(" ","+")
date = str(datetime.datetime.now().date()) #timestamp
filename =query2Google+"_"+date+"_"+'SearchNews.csv' #csv filename
f = open(filename,"wb")
url = "http://www.google.com.sg/search?q="+s+"&tbm=nws&tbs=qdr:y" # URL for query of news results within one year and sort by date
#htmlpage = urllib2.urlopen(url).read()
time.sleep(randint(0, 2))#waiting
htmlpage = requests.get(url)
print("Status code: "+ str(htmlpage.status_code))
soup = BeautifulSoup(htmlpage.text,'lxml')
df = []
for result_table in soup.findAll("div", {"class": "g"}):
a_click = result_table.find("a")
#print ("-----Title----\n" + str(a_click.renderContents()))#Title
#print ("----URL----\n" + str(a_click.get("href"))) #URL
#print ("----Brief----\n" + str(result_table.find("div", {"class": "st"}).renderContents()))#Brief
#print ("Done")
df=np.append(df,[str(a_click.renderContents()).strip("b'"),str(a_click.get("href")).strip('/url?q='),str(result_table.find("div", {"class": "st"}).renderContents()).strip("b'")])
df = np.reshape(df,(-1,3))
df1 = pd.DataFrame(df,columns=['Title','URL','Brief'])
print("Search Crawl Done!")
df1.to_csv(filename, index=False,encoding='utf-8')
f.close()
return
QGN(query2Google)
こんにちはアダム、結果の複数のページを持つとき、コードは完璧に動作しますが、私は行を実現します:if soup.find( 'td'、{'class': 'b'、 'style': 'text-align :None ':None):なし はエラーを表示しますAttributeError:検索結果が単一ページで、反転するページがない場合、' NoneType 'オブジェクトには属性' a 'がありません。これを取り除く方法はありますか? – Sun
この行は、ナビゲーションバーに次のページがあるかどうかを確認します。これは、Webブラウザで 'inspect element'を使用すると確認できます。何らかの理由でナビゲーションバーが表示されない場合、この行は例外を発生させます。私はコードをキャッチするように更新します –