0

私はクローラを初めて利用しています。私はPython 3.Xを使用しています。現在、私は新鮮なスタートのためにGoogleニュースをクロールするように練習していますが、コードに問題が発生しました(コードは実行されますが、何も返されませんでした)。私はコードがGoogleのニュースをクロールしてURLとタイトルとブリーフィングの結果を返すようにしたい。URL、タイトル、ブリーフィングで結果を返すGoogleニュースクローラ

お時間をありがとうございました。私のコードは以下の通りです:

import sys 
import urllib 
import requests 
from bs4 import BeautifulSoup 
import time 

s = "Stack Overflow" 
url = "http://www.google.com.sg/search?q="+s+"&tbm=nws&tbs=qdr:y" 
#htmlpage = urllib2.urlopen(url).read() 
time.sleep(randint(0, 2)) 
htmlpage = requests.get(url) 
soup = BeautifulSoup(htmlpage.text,'lxml') 
#print (len(soup.findAll("table", {"class": "result"}))) 
for result_table in soup.findAll("table", {"class": "result"}): 
    a_click = result_table.find("a") 
    print ("-----Title----\n" + a_click.renderContents())#Title 
    print ("----URL----\n" + str(a_click.get("href")))#URL 
    print ("----Brief----\n" + result_table.find("div", {"class": "c-abstract"}).renderContents())#Brief 
    print ("Done") 
+0

代わりにあなたのコードへのリンクを、あなたはこれを編集して、直接質問にそれを貼り付けてくださいすることができますか?あなたが間違っているかもしれないと思うことを教えてください。そして、どこに行き詰まっているのかを教えてください。 – SDsolar

+0

私はコードを提供しました。私は、結果のURL、タイトル、ブリーフィングを印刷しない私のコードに悩まされています。 – Sun

答えて

0

これは私が結果を得た方法で、それが役に立てば幸い:

>>> 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") 
... 
-----Title---- 
b"<b>Stack Overflow</b>: Like sleep? Don't code in C" 
----URL---- 
/url?q=http://www.infoworld.com/article/3190701/application-development/stack-overflow-like-sleep-dont-code-in-c.html&sa=U&ved=0ahUKEwjc34W_3NLTAhVIMY8KHVu_BoUQqQIIFigAMAA&usg=AFQjCNE7xDqkg-kyFR65krfMIJqIchHFwg 
----Brief---- 
b'In analysis of programming traffic on the <b>Stack Overflow</b> online community over for four weeks last August, <b>Stack Overflow</b> Insights data scientist David Robinson,\xc2\xa0...' 
Done 
+1

ありがとうございました!ここで、「Stack + Overflow」の正確な結果が必要だとしたら、コードをどのように変更する必要がありますか? s = "Stack + Overflow"は動作しないようです。 – Sun

+1

はs = "Stack + Overflow"をs = '"Stack + Overflow"'に変更するだけです。 – Sun

+0

優れた記事。私はそれが本当であることを知っている。 Arduinoプログラミングは、中断したくないワークフローになります。また、デスクトップマシン上の実際のC++プログラムでは、ポインターや変数名のように覚えておくべきことがたくさんあります。中括弧や字下げを傷つけないように、あなたが覚えているクラスはすべてのメソッドを覚えておかなければなりませんデータ構造の複雑さや特性、スリープ状態になることは、起床時に自分のコード(およびあなたが借りたかもしれないすべてのライブラリ)を再学習しなければならないことを意味し、貴重なプログラミング時間を無駄にします。 ;-) – SDsolar

関連する問題