2016-07-10 13 views
2

を解析するだけで提出のためのredditシャワーの考えを解析しようとして問題に遭遇しています美しいスープとのreddit

このコードで
path = 'https://www.reddit.com/r/Showerthoughts/' 

with requests.Session() as s: 

    r = s.get(path) 
    soup = BeautifulSoup(r.content, "lxml") 

    # print(soup.prettify()) 

    threads = soup.find_all('p') 


    for thread in threads: 
     soup = thread 
     text = soup('a') 
     try: 
      print(text[0]) 
     except: 
      pass 

私は同封されている各投稿のタイトルを取得しようとしています< p>タグ、次に< a>タグの "title may-blank"クラスである。しかし、上記のコードでは、タグがあるタグを含むすべての要素が返されます。タイトルがそこにあると思っても、私はsoup.findAll()の2つのインターラクションを通過しなければなりません。私は

titles = soup.findAll("a", {"class":"title may-blank}) for title in titles: print(title.string)
を実行しようとしましたタイトルの私の知識から

のすべてが、このdidntの仕事 任意の考えを印刷? PS私はreddit APIでこれを行うことができ、より効率的であることを知っていますが、スクラッチにならないので、解析技術を向上させたいと思います。また、あなたがユーザーエージェントを追加する必要があり、彼らはCSSクラスです

+0

サブフォームの内容は、http:// www.reddit.com/r/Showerthoughts/.json'を使用してJSON形式で取得できます。 – PaulMcG

答えて

2

助けてくれてありがとう:あなたはまた、soup.find_all("a", class_="title")を使用することができますが、それはあなたが必要以上に一致する可能性が

import requests 
from bs4 import BeautifulSoup 
path = 'https://www.reddit.com/r/Showerthoughts/' 
headers ={"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"} 
with requests.Session() as s: 
    r = s.get(path, headers=headers) 
    soup = BeautifulSoup(r.content, "lxml") 
    threads = soup.select('a.title.may-blank') 
    for a in threads: 
     print(a) 

+0

完璧な気持ちになっていますか、あなたのカルマには – entercaspa

+0

hrefだけを 'a [" href "]'にしたい場合は 'a.text'を表示し、それを訪問したい場合はベースURLに結合してください。 –